powerpc/gen83xx: Fix warnings

This commit is contained in:
Joel Sherrill
2014-10-17 09:50:05 -05:00
parent d8e2046133
commit b5548e592b
4 changed files with 477 additions and 450 deletions

View File

@@ -117,7 +117,7 @@ rtems_status_code bsp_register_i2c
i2c_busno[i] = rtems_libi2c_register_bus(device_path, &desc->bus_desc); i2c_busno[i] = rtems_libi2c_register_bus(device_path, &desc->bus_desc);
} }
#ifdef RTEMS_BSP_I2C_EEPROM_DEVICE_NAME #if defined(RTEMS_BSP_I2C_EEPROM_DEVICE_NAME)
if (n > 0) { if (n > 0) {
/* /*
* register EEPROM to bus 1, Address 0x50 * register EEPROM to bus 1, Address 0x50
@@ -126,9 +126,7 @@ rtems_status_code bsp_register_i2c
i2c_2b_eeprom_driver_descriptor, i2c_2b_eeprom_driver_descriptor,
i2c_busno[0],0x50); i2c_busno[0],0x50);
} }
#endif /* RTEMS_BSP_I2C_EEPROM_DEVICE_NAME */ #elif defined(MPC83XX_BOARD_BR_UID)
#ifdef MPC83XX_BOARD_BR_UID
if (n > 0) { if (n > 0) {
rtems_libi2c_register_drv( rtems_libi2c_register_drv(
"sc620", "sc620",
@@ -137,7 +135,14 @@ rtems_status_code bsp_register_i2c
0x70 0x70
); );
} }
#endif /* MPC83XX_BOARD_BR_UID */ #else
/*
* We have no i2c configuration for this variant but need to mark
* i2c_busno as used.
*/
(void) i2c_busno[0]; /* avoid set but not used warning */
#endif
/* /*
* FIXME: register RTC driver, when available * FIXME: register RTC driver, when available

View File

@@ -82,8 +82,10 @@ extern "C" {
/* misc macros */ /* misc macros */
#define BSP_ARRAY_CNT(arr) (sizeof(arr)/sizeof(arr[0])) #define BSP_ARRAY_CNT(arr) (sizeof(arr)/sizeof(arr[0]))
/* functions */ void *bsp_idle_thread( uintptr_t ignored );
#define BSP_IDLE_TASK_BODY bsp_idle_thread
/* functions */
rtems_status_code bsp_register_i2c(void); rtems_status_code bsp_register_i2c(void);
rtems_status_code bsp_register_spi(void); rtems_status_code bsp_register_spi(void);
@@ -147,6 +149,13 @@ void cpu_init( void);
void bsp_restart(void *addr); void bsp_restart(void *addr);
#if defined(HAS_UBOOT)
/* Routine to obtain U-Boot environment variables */
const char *bsp_uboot_getenv(
const char *name
);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -17,7 +17,6 @@
| this file integrates the IPIC irq controller | | this file integrates the IPIC irq controller |
\*===============================================================*/ \*===============================================================*/
#include <mpc83xx/mpc83xx.h> #include <mpc83xx/mpc83xx.h>
#include <rtems.h> #include <rtems.h>
@@ -36,9 +35,9 @@
#define MPC83XX_IPIC_INVALID_MASK_POSITION 255 #define MPC83XX_IPIC_INVALID_MASK_POSITION 255
typedef struct { typedef struct {
volatile uint32_t *pend_reg; volatile uint32_t *pend_reg;
volatile uint32_t *mask_reg; volatile uint32_t *mask_reg;
const uint32_t bit_num; const uint32_t bit_num;
} BSP_isrc_rsc_t; } BSP_isrc_rsc_t;
/* /*
@@ -51,244 +50,245 @@ typedef struct {
* sermr : 96 .. 127 * sermr : 96 .. 127
*/ */
typedef struct { typedef struct {
uint32_t simsr_mask [2]; uint32_t simsr_mask [2];
uint32_t semsr_mask; uint32_t semsr_mask;
uint32_t sermr_mask; uint32_t sermr_mask;
} mpc83xx_ipic_mask_t; } mpc83xx_ipic_mask_t;
static const BSP_isrc_rsc_t mpc83xx_ipic_isrc_rsc [MPC83XX_IPIC_VECTOR_NUMBER] = { static const BSP_isrc_rsc_t mpc83xx_ipic_isrc_rsc [MPC83XX_IPIC_VECTOR_NUMBER] = {
/* vector 0 */ /* vector 0 */
{&mpc83xx.ipic.sersr, &mpc83xx.ipic.sermr, 31}, {&mpc83xx.ipic.sersr, &mpc83xx.ipic.sermr, 31},
{NULL, NULL, 0}, {NULL, NULL, 0},
{NULL, NULL, 0}, {NULL, NULL, 0},
{NULL, NULL, 0}, {NULL, NULL, 0},
{NULL, NULL, 0}, {NULL, NULL, 0},
{NULL, NULL, 0}, {NULL, NULL, 0},
{NULL, NULL, 0}, {NULL, NULL, 0},
{NULL, NULL, 0}, {NULL, NULL, 0},
/* vector 8 */ /* vector 8 */
{NULL, NULL, 0}, /* reserved vector 8 */ {NULL, NULL, 0}, /* reserved vector 8 */
/* vector 9: UART1 SIxxR_H, Bit 24 */ /* vector 9: UART1 SIxxR_H, Bit 24 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 24}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 24},
/* vector 10: UART2 SIxxR_H, Bit 25 */ /* vector 10: UART2 SIxxR_H, Bit 25 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 25}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 25},
/* vector 11: SEC SIxxR_H, Bit 26 */ /* vector 11: SEC SIxxR_H, Bit 26 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 26}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 26},
{NULL, NULL, 0}, /* reserved vector 12 */ {NULL, NULL, 0}, /* reserved vector 12 */
{NULL, NULL, 0}, /* reserved vector 13 */ {NULL, NULL, 0}, /* reserved vector 13 */
/* vector 14: I2C1 SIxxR_H, Bit 29 */ /* vector 14: I2C1 SIxxR_H, Bit 29 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 29}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 29},
/* vector 15: I2C2 SIxxR_H, Bit 30 */ /* vector 15: I2C2 SIxxR_H, Bit 30 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 30}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 30},
/* vector 16: SPI SIxxR_H, Bit 31 */ /* vector 16: SPI SIxxR_H, Bit 31 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 31}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 31},
/* vector 17: IRQ1 SExxR , Bit 1 */ /* vector 17: IRQ1 SExxR , Bit 1 */
{&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 1}, {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 1},
/* vector 18: IRQ2 SExxR , Bit 2 */ /* vector 18: IRQ2 SExxR , Bit 2 */
{&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 2}, {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 2},
/* vector 19: IRQ3 SExxR , Bit 3 */ /* vector 19: IRQ3 SExxR , Bit 3 */
{&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 3}, {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 3},
/* vector 20: IRQ4 SExxR , Bit 4 */ /* vector 20: IRQ4 SExxR , Bit 4 */
{&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 4}, {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 4},
/* vector 21: IRQ5 SExxR , Bit 5 */ /* vector 21: IRQ5 SExxR , Bit 5 */
{&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 5}, {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 5},
/* vector 22: IRQ6 SExxR , Bit 6 */ /* vector 22: IRQ6 SExxR , Bit 6 */
{&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 6}, {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 6},
/* vector 23: IRQ7 SExxR , Bit 7 */ /* vector 23: IRQ7 SExxR , Bit 7 */
{&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 7}, {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 7},
{NULL, NULL, 0}, /* reserved vector 24 */ {NULL, NULL, 0}, /* reserved vector 24 */
{NULL, NULL, 0}, /* reserved vector 25 */ {NULL, NULL, 0}, /* reserved vector 25 */
{NULL, NULL, 0}, /* reserved vector 26 */ {NULL, NULL, 0}, /* reserved vector 26 */
{NULL, NULL, 0}, /* reserved vector 27 */ {NULL, NULL, 0}, /* reserved vector 27 */
{NULL, NULL, 0}, /* reserved vector 28 */ {NULL, NULL, 0}, /* reserved vector 28 */
{NULL, NULL, 0}, /* reserved vector 29 */ {NULL, NULL, 0}, /* reserved vector 29 */
{NULL, NULL, 0}, /* reserved vector 30 */ {NULL, NULL, 0}, /* reserved vector 30 */
{NULL, NULL, 0}, /* reserved vector 31 */ {NULL, NULL, 0}, /* reserved vector 31 */
/* vector 32: TSEC1 Tx SIxxR_H , Bit 0 */ /* vector 32: TSEC1 Tx SIxxR_H , Bit 0 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 0}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 0},
/* vector 33: TSEC1 Rx SIxxR_H , Bit 1 */ /* vector 33: TSEC1 Rx SIxxR_H , Bit 1 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 1}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 1},
/* vector 34: TSEC1 Err SIxxR_H , Bit 2 */ /* vector 34: TSEC1 Err SIxxR_H , Bit 2 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 2}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 2},
/* vector 35: TSEC2 Tx SIxxR_H , Bit 3 */ /* vector 35: TSEC2 Tx SIxxR_H , Bit 3 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 3}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 3},
/* vector 36: TSEC2 Rx SIxxR_H , Bit 4 */ /* vector 36: TSEC2 Rx SIxxR_H , Bit 4 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 4}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 4},
/* vector 37: TSEC2 Err SIxxR_H , Bit 5 */ /* vector 37: TSEC2 Err SIxxR_H , Bit 5 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 5}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 5},
/* vector 38: USB DR SIxxR_H , Bit 6 */ /* vector 38: USB DR SIxxR_H , Bit 6 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 6}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 6},
/* vector 39: USB MPH SIxxR_H , Bit 7 */ /* vector 39: USB MPH SIxxR_H , Bit 7 */
{&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 7}, {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 7},
{NULL, NULL, 0}, /* reserved vector 40 */ {NULL, NULL, 0}, /* reserved vector 40 */
{NULL, NULL, 0}, /* reserved vector 41 */ {NULL, NULL, 0}, /* reserved vector 41 */
{NULL, NULL, 0}, /* reserved vector 42 */ {NULL, NULL, 0}, /* reserved vector 42 */
{NULL, NULL, 0}, /* reserved vector 43 */ {NULL, NULL, 0}, /* reserved vector 43 */
{NULL, NULL, 0}, /* reserved vector 44 */ {NULL, NULL, 0}, /* reserved vector 44 */
{NULL, NULL, 0}, /* reserved vector 45 */ {NULL, NULL, 0}, /* reserved vector 45 */
{NULL, NULL, 0}, /* reserved vector 46 */ {NULL, NULL, 0}, /* reserved vector 46 */
{NULL, NULL, 0}, /* reserved vector 47 */ {NULL, NULL, 0}, /* reserved vector 47 */
/* vector 48: IRQ0 SExxR , Bit 0 */ /* vector 48: IRQ0 SExxR , Bit 0 */
{&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 0}, {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 0},
{NULL, NULL, 0}, /* reserved vector 49 */ {NULL, NULL, 0}, /* reserved vector 49 */
{NULL, NULL, 0}, /* reserved vector 50 */ {NULL, NULL, 0}, /* reserved vector 50 */
{NULL, NULL, 0}, /* reserved vector 51 */ {NULL, NULL, 0}, /* reserved vector 51 */
{NULL, NULL, 0}, /* reserved vector 52 */ {NULL, NULL, 0}, /* reserved vector 52 */
{NULL, NULL, 0}, /* reserved vector 53 */ {NULL, NULL, 0}, /* reserved vector 53 */
{NULL, NULL, 0}, /* reserved vector 54 */ {NULL, NULL, 0}, /* reserved vector 54 */
{NULL, NULL, 0}, /* reserved vector 55 */ {NULL, NULL, 0}, /* reserved vector 55 */
{NULL, NULL, 0}, /* reserved vector 56 */ {NULL, NULL, 0}, /* reserved vector 56 */
{NULL, NULL, 0}, /* reserved vector 57 */ {NULL, NULL, 0}, /* reserved vector 57 */
{NULL, NULL, 0}, /* reserved vector 58 */ {NULL, NULL, 0}, /* reserved vector 58 */
{NULL, NULL, 0}, /* reserved vector 59 */ {NULL, NULL, 0}, /* reserved vector 59 */
{NULL, NULL, 0}, /* reserved vector 60 */ {NULL, NULL, 0}, /* reserved vector 60 */
{NULL, NULL, 0}, /* reserved vector 61 */ {NULL, NULL, 0}, /* reserved vector 61 */
{NULL, NULL, 0}, /* reserved vector 62 */ {NULL, NULL, 0}, /* reserved vector 62 */
{NULL, NULL, 0}, /* reserved vector 63 */ {NULL, NULL, 0}, /* reserved vector 63 */
/* vector 64: RTC SEC SIxxR_L , Bit 0 */ /* vector 64: RTC SEC SIxxR_L , Bit 0 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 0}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 0},
/* vector 65: PIT SIxxR_L , Bit 1 */ /* vector 65: PIT SIxxR_L , Bit 1 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 1}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 1},
/* vector 66: PCI1 SIxxR_L , Bit 2 */ /* vector 66: PCI1 SIxxR_L , Bit 2 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 2}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 2},
/* vector 67: PCI2 SIxxR_L , Bit 3 */ /* vector 67: PCI2 SIxxR_L , Bit 3 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 3}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 3},
/* vector 68: RTC ALR SIxxR_L , Bit 4 */ /* vector 68: RTC ALR SIxxR_L , Bit 4 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 4}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 4},
/* vector 69: MU SIxxR_L , Bit 5 */ /* vector 69: MU SIxxR_L , Bit 5 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 5}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 5},
/* vector 70: SBA SIxxR_L , Bit 6 */ /* vector 70: SBA SIxxR_L , Bit 6 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 6}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 6},
/* vector 71: DMA SIxxR_L , Bit 7 */ /* vector 71: DMA SIxxR_L , Bit 7 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 7}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 7},
/* vector 72: GTM4 SIxxR_L , Bit 8 */ /* vector 72: GTM4 SIxxR_L , Bit 8 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 8}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 8},
/* vector 73: GTM8 SIxxR_L , Bit 9 */ /* vector 73: GTM8 SIxxR_L , Bit 9 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 9}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 9},
/* vector 74: GPIO1 SIxxR_L , Bit 10 */ /* vector 74: GPIO1 SIxxR_L , Bit 10 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 10}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 10},
/* vector 75: GPIO2 SIxxR_L , Bit 11 */ /* vector 75: GPIO2 SIxxR_L , Bit 11 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 11}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 11},
/* vector 76: DDR SIxxR_L , Bit 12 */ /* vector 76: DDR SIxxR_L , Bit 12 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 12}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 12},
/* vector 77: LBC SIxxR_L , Bit 13 */ /* vector 77: LBC SIxxR_L , Bit 13 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 13}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 13},
/* vector 78: GTM2 SIxxR_L , Bit 14 */ /* vector 78: GTM2 SIxxR_L , Bit 14 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 14}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 14},
/* vector 79: GTM6 SIxxR_L , Bit 15 */ /* vector 79: GTM6 SIxxR_L , Bit 15 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 15}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 15},
/* vector 80: PMC SIxxR_L , Bit 16 */ /* vector 80: PMC SIxxR_L , Bit 16 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 16}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 16},
{NULL, NULL, 0}, /* reserved vector 81 */ {NULL, NULL, 0}, /* reserved vector 81 */
{NULL, NULL, 0}, /* reserved vector 82 */ {NULL, NULL, 0}, /* reserved vector 82 */
{NULL, NULL, 0}, /* reserved vector 63 */ {NULL, NULL, 0}, /* reserved vector 63 */
/* vector 84: GTM3 SIxxR_L , Bit 20 */ /* vector 84: GTM3 SIxxR_L , Bit 20 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 20}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 20},
/* vector 85: GTM7 SIxxR_L , Bit 21 */ /* vector 85: GTM7 SIxxR_L , Bit 21 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 21}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 21},
{NULL, NULL, 0}, /* reserved vector 81 */ {NULL, NULL, 0}, /* reserved vector 81 */
{NULL, NULL, 0}, /* reserved vector 82 */ {NULL, NULL, 0}, /* reserved vector 82 */
{NULL, NULL, 0}, /* reserved vector 63 */ {NULL, NULL, 0}, /* reserved vector 63 */
{NULL, NULL, 0}, /* reserved vector 63 */ {NULL, NULL, 0}, /* reserved vector 63 */
/* vector 90: GTM1 SIxxR_L , Bit 26 */ /* vector 90: GTM1 SIxxR_L , Bit 26 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 26}, {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 26},
/* vector 91: GTM5 SIxxR_L , Bit 27 */ /* vector 91: GTM5 SIxxR_L , Bit 27 */
{&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 27} {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 27}
}; };
static const uint8_t mpc83xx_ipic_mask_position_table [MPC83XX_IPIC_VECTOR_NUMBER] = { static const uint8_t
MPC83XX_IPIC_INVALID_MASK_POSITION, mpc83xx_ipic_mask_position_table [MPC83XX_IPIC_VECTOR_NUMBER] = {
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
7, MPC83XX_IPIC_INVALID_MASK_POSITION,
6, 7,
5, 6,
MPC83XX_IPIC_INVALID_MASK_POSITION, 5,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
2, MPC83XX_IPIC_INVALID_MASK_POSITION,
1, 2,
0, 1,
94, 0,
93, 94,
92, 93,
91, 92,
90, 91,
89, 90,
88, 89,
MPC83XX_IPIC_INVALID_MASK_POSITION, 88,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
31, MPC83XX_IPIC_INVALID_MASK_POSITION,
30, 31,
29, 30,
28, 29,
27, 28,
26, 27,
25, 26,
24, 25,
MPC83XX_IPIC_INVALID_MASK_POSITION, 24,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
95, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, 95,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
63, MPC83XX_IPIC_INVALID_MASK_POSITION,
62, 63,
61, 62,
60, 61,
59, 60,
58, 59,
57, 58,
56, 57,
55, 56,
54, 55,
53, 54,
52, 53,
51, 52,
50, 51,
49, 50,
48, 49,
47, 48,
MPC83XX_IPIC_INVALID_MASK_POSITION, 47,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
43, MPC83XX_IPIC_INVALID_MASK_POSITION,
42, 43,
MPC83XX_IPIC_INVALID_MASK_POSITION, 42,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
MPC83XX_IPIC_INVALID_MASK_POSITION, MPC83XX_IPIC_INVALID_MASK_POSITION,
37, MPC83XX_IPIC_INVALID_MASK_POSITION,
36 37,
36
}; };
/* /*
@@ -298,71 +298,79 @@ static const uint8_t mpc83xx_ipic_mask_position_table [MPC83XX_IPIC_VECTOR_NUMBE
*/ */
static mpc83xx_ipic_mask_t mpc83xx_ipic_prio2mask [MPC83XX_IPIC_VECTOR_NUMBER]; static mpc83xx_ipic_mask_t mpc83xx_ipic_prio2mask [MPC83XX_IPIC_VECTOR_NUMBER];
rtems_status_code mpc83xx_ipic_set_mask( rtems_vector_number vector, rtems_vector_number mask_vector, bool mask) rtems_status_code mpc83xx_ipic_set_mask(
rtems_vector_number vector,
rtems_vector_number mask_vector,
bool mask
)
{ {
uint8_t pos = 0; uint8_t pos = 0;
mpc83xx_ipic_mask_t *mask_entry; mpc83xx_ipic_mask_t *mask_entry;
uint32_t *mask_reg; uint32_t *mask_reg;
rtems_interrupt_level level; rtems_interrupt_level level;
/* Parameter check */ /* Parameter check */
if (!MPC83XX_IPIC_IS_VALID_VECTOR( vector) || !MPC83XX_IPIC_IS_VALID_VECTOR( mask_vector)) { if (!MPC83XX_IPIC_IS_VALID_VECTOR( vector) ||
return RTEMS_INVALID_NUMBER; !MPC83XX_IPIC_IS_VALID_VECTOR( mask_vector)) {
} else if (vector == mask_vector) { return RTEMS_INVALID_NUMBER;
return RTEMS_RESOURCE_IN_USE; } else if (vector == mask_vector) {
} return RTEMS_RESOURCE_IN_USE;
}
/* Position and mask entry */ /* Position and mask entry */
pos = mpc83xx_ipic_mask_position_table [mask_vector]; pos = mpc83xx_ipic_mask_position_table [mask_vector];
mask_entry = &mpc83xx_ipic_prio2mask [vector]; mask_entry = &mpc83xx_ipic_prio2mask [vector];
/* Mask register and position */ /* Mask register and position */
if (pos < 32) { if (pos < 32) {
mask_reg = &mask_entry->simsr_mask [0]; mask_reg = &mask_entry->simsr_mask [0];
} else if (pos < 64) { } else if (pos < 64) {
pos -= 32; pos -= 32;
mask_reg = &mask_entry->simsr_mask [1]; mask_reg = &mask_entry->simsr_mask [1];
} else if (pos < 96) { } else if (pos < 96) {
pos -= 64; pos -= 64;
mask_reg = &mask_entry->semsr_mask; mask_reg = &mask_entry->semsr_mask;
} else if (pos < 128) { } else if (pos < 128) {
pos -= 96; pos -= 96;
mask_reg = &mask_entry->sermr_mask; mask_reg = &mask_entry->sermr_mask;
} else { } else {
return RTEMS_NOT_IMPLEMENTED; return RTEMS_NOT_IMPLEMENTED;
} }
/* Mask or unmask */ /* Mask or unmask */
if (mask) { if (mask) {
rtems_interrupt_disable( level); rtems_interrupt_disable( level);
*mask_reg &= ~(1 << pos); *mask_reg &= ~(1 << pos);
rtems_interrupt_enable( level); rtems_interrupt_enable( level);
} else { } else {
rtems_interrupt_disable( level); rtems_interrupt_disable( level);
*mask_reg |= 1 << pos; *mask_reg |= 1 << pos;
rtems_interrupt_enable( level); rtems_interrupt_enable( level);
} }
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;
} }
rtems_status_code mpc83xx_ipic_set_highest_priority_interrupt( rtems_vector_number vector, int type) rtems_status_code mpc83xx_ipic_set_highest_priority_interrupt(
rtems_vector_number vector,
int type
)
{ {
rtems_interrupt_level level; rtems_interrupt_level level;
uint32_t reg = 0; uint32_t reg = 0;
if (!MPC83XX_IPIC_IS_VALID_VECTOR( vector)) { if (!MPC83XX_IPIC_IS_VALID_VECTOR( vector)) {
return RTEMS_INVALID_NUMBER; return RTEMS_INVALID_NUMBER;
} else if (type < 0 || type > MPC83XX_IPIC_INTERRUPT_CRITICAL) { } else if (type < 0 || type > MPC83XX_IPIC_INTERRUPT_CRITICAL) {
return RTEMS_INVALID_NUMBER; return RTEMS_INVALID_NUMBER;
} }
rtems_interrupt_disable( level); rtems_interrupt_disable( level);
reg = mpc83xx.ipic.sicfr; reg = mpc83xx.ipic.sicfr;
mpc83xx.ipic.sicfr = (reg & ~0x7f000300) | (vector << 24) | (type << 8); mpc83xx.ipic.sicfr = (reg & ~0x7f000300) | (vector << 24) | (type << 8);
rtems_interrupt_enable( level); rtems_interrupt_enable( level);
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;
} }
/* /*
@@ -370,42 +378,42 @@ rtems_status_code mpc83xx_ipic_set_highest_priority_interrupt( rtems_vector_numb
*/ */
rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqnum) rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqnum)
{ {
rtems_vector_number vecnum = irqnum - BSP_IPIC_IRQ_LOWEST_OFFSET; rtems_vector_number vecnum = irqnum - BSP_IPIC_IRQ_LOWEST_OFFSET;
const BSP_isrc_rsc_t *rsc_ptr; const BSP_isrc_rsc_t *rsc_ptr;
if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) { if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) {
rsc_ptr = &mpc83xx_ipic_isrc_rsc [vecnum]; rsc_ptr = &mpc83xx_ipic_isrc_rsc [vecnum];
if (rsc_ptr->mask_reg != NULL) { if (rsc_ptr->mask_reg != NULL) {
uint32_t bit = 1U << (31 - rsc_ptr->bit_num); uint32_t bit = 1U << (31 - rsc_ptr->bit_num);
rtems_interrupt_level level; rtems_interrupt_level level;
rtems_interrupt_disable(level); rtems_interrupt_disable(level);
*(rsc_ptr->mask_reg) |= bit; *(rsc_ptr->mask_reg) |= bit;
rtems_interrupt_enable(level); rtems_interrupt_enable(level);
} }
} }
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;
} }
rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum) rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum)
{ {
rtems_vector_number vecnum = irqnum - BSP_IPIC_IRQ_LOWEST_OFFSET; rtems_vector_number vecnum = irqnum - BSP_IPIC_IRQ_LOWEST_OFFSET;
const BSP_isrc_rsc_t *rsc_ptr; const BSP_isrc_rsc_t *rsc_ptr;
if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) { if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) {
rsc_ptr = &mpc83xx_ipic_isrc_rsc [vecnum]; rsc_ptr = &mpc83xx_ipic_isrc_rsc [vecnum];
if (rsc_ptr->mask_reg != NULL) { if (rsc_ptr->mask_reg != NULL) {
uint32_t bit = 1U << (31 - rsc_ptr->bit_num); uint32_t bit = 1U << (31 - rsc_ptr->bit_num);
rtems_interrupt_level level; rtems_interrupt_level level;
rtems_interrupt_disable(level); rtems_interrupt_disable(level);
*(rsc_ptr->mask_reg) &= ~bit; *(rsc_ptr->mask_reg) &= ~bit;
rtems_interrupt_enable(level); rtems_interrupt_enable(level);
} }
} }
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;
} }
/* /*
@@ -413,173 +421,176 @@ rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum)
*/ */
static int BSP_irq_handle_at_ipic( unsigned excNum) static int BSP_irq_handle_at_ipic( unsigned excNum)
{ {
int32_t vecnum; int32_t vecnum;
#ifdef GEN83XX_ENABLE_INTERRUPT_NESTING #ifdef GEN83XX_ENABLE_INTERRUPT_NESTING
mpc83xx_ipic_mask_t mask_save; mpc83xx_ipic_mask_t mask_save;
const mpc83xx_ipic_mask_t *mask_ptr; const mpc83xx_ipic_mask_t *mask_ptr;
uint32_t msr = 0; uint32_t msr = 0;
rtems_interrupt_level level; rtems_interrupt_level level;
#endif #endif
/* Get vector number */ /* Get vector number */
switch (excNum) { switch (excNum) {
case ASM_EXT_VECTOR: case ASM_EXT_VECTOR:
vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.sivcr); vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.sivcr);
break; break;
case ASM_E300_SYSMGMT_VECTOR: case ASM_E300_SYSMGMT_VECTOR:
vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.smvcr); vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.smvcr);
break; break;
case ASM_E300_CRIT_VECTOR: case ASM_E300_CRIT_VECTOR:
vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.scvcr); vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.scvcr);
break; break;
default: default:
return 1; return 1;
} }
/* /*
* Check the vector number, mask lower priority interrupts, enable * Check the vector number, mask lower priority interrupts, enable
* exceptions and dispatch the handler. * exceptions and dispatch the handler.
*/ */
if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) { if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) {
#ifdef GEN83XX_ENABLE_INTERRUPT_NESTING #ifdef GEN83XX_ENABLE_INTERRUPT_NESTING
mask_ptr = &mpc83xx_ipic_prio2mask [vecnum]; mask_ptr = &mpc83xx_ipic_prio2mask [vecnum];
rtems_interrupt_disable( level); rtems_interrupt_disable( level);
/* Save current mask registers */ /* Save current mask registers */
mask_save.simsr_mask [0] = mpc83xx.ipic.simsr [0]; mask_save.simsr_mask [0] = mpc83xx.ipic.simsr [0];
mask_save.simsr_mask [1] = mpc83xx.ipic.simsr [1]; mask_save.simsr_mask [1] = mpc83xx.ipic.simsr [1];
mask_save.semsr_mask = mpc83xx.ipic.semsr; mask_save.semsr_mask = mpc83xx.ipic.semsr;
mask_save.sermr_mask = mpc83xx.ipic.sermr; mask_save.sermr_mask = mpc83xx.ipic.sermr;
/* Mask all lower priority interrupts */ /* Mask all lower priority interrupts */
mpc83xx.ipic.simsr [0] &= mask_ptr->simsr_mask [0]; mpc83xx.ipic.simsr [0] &= mask_ptr->simsr_mask [0];
mpc83xx.ipic.simsr [1] &= mask_ptr->simsr_mask [1]; mpc83xx.ipic.simsr [1] &= mask_ptr->simsr_mask [1];
mpc83xx.ipic.semsr &= mask_ptr->semsr_mask; mpc83xx.ipic.semsr &= mask_ptr->semsr_mask;
mpc83xx.ipic.sermr &= mask_ptr->sermr_mask; mpc83xx.ipic.sermr &= mask_ptr->sermr_mask;
rtems_interrupt_enable( level); rtems_interrupt_enable( level);
/* Enable all interrupts */ /* Enable all interrupts */
if (excNum != ASM_E300_CRIT_VECTOR) { if (excNum != ASM_E300_CRIT_VECTOR) {
msr = ppc_external_exceptions_enable(); msr = ppc_external_exceptions_enable();
} }
#endif /* GEN83XX_ENABLE_INTERRUPT_NESTING */ #endif /* GEN83XX_ENABLE_INTERRUPT_NESTING */
/* Dispatch interrupt handlers */ /* Dispatch interrupt handlers */
bsp_interrupt_handler_dispatch( vecnum + BSP_IPIC_IRQ_LOWEST_OFFSET); bsp_interrupt_handler_dispatch( vecnum + BSP_IPIC_IRQ_LOWEST_OFFSET);
#ifdef GEN83XX_ENABLE_INTERRUPT_NESTING #ifdef GEN83XX_ENABLE_INTERRUPT_NESTING
/* Restore machine state */ /* Restore machine state */
if (excNum != ASM_E300_CRIT_VECTOR) { if (excNum != ASM_E300_CRIT_VECTOR) {
ppc_external_exceptions_disable( msr); ppc_external_exceptions_disable( msr);
} }
/* Restore initial masks */ /* Restore initial masks */
rtems_interrupt_disable( level); rtems_interrupt_disable( level);
mpc83xx.ipic.simsr [0] = mask_save.simsr_mask [0]; mpc83xx.ipic.simsr [0] = mask_save.simsr_mask [0];
mpc83xx.ipic.simsr [1] = mask_save.simsr_mask [1]; mpc83xx.ipic.simsr [1] = mask_save.simsr_mask [1];
mpc83xx.ipic.semsr = mask_save.semsr_mask; mpc83xx.ipic.semsr = mask_save.semsr_mask;
mpc83xx.ipic.sermr = mask_save.sermr_mask; mpc83xx.ipic.sermr = mask_save.sermr_mask;
rtems_interrupt_enable( level); rtems_interrupt_enable( level);
#endif /* GEN83XX_ENABLE_INTERRUPT_NESTING */ #endif /* GEN83XX_ENABLE_INTERRUPT_NESTING */
} else { } else {
bsp_interrupt_handler_default( vecnum); bsp_interrupt_handler_default( vecnum);
} }
return 0; return 0;
} }
/* /*
* Fill the array mpc83xx_ipic_prio2mask to allow masking of lower prio sources * Fill the array mpc83xx_ipic_prio2mask to allow masking of lower prio sources
* to implement nested interrupts. * to implement nested interrupts.
*/ */
rtems_status_code mpc83xx_ipic_calc_prio2mask( void) static rtems_status_code mpc83xx_ipic_calc_prio2mask(void)
{ {
rtems_status_code rc = RTEMS_SUCCESSFUL; rtems_status_code rc = RTEMS_SUCCESSFUL;
/* /*
* FIXME: fill the array * FIXME: fill the array
*/ */
return rc; return rc;
} }
/* /*
* Activate the interrupt controller * Activate the interrupt controller
*/ */
rtems_status_code mpc83xx_ipic_initialize( void) static rtems_status_code mpc83xx_ipic_initialize(void)
{ {
/* /*
* mask off all interrupts * mask off all interrupts
*/ */
mpc83xx.ipic.simsr [0] = 0; mpc83xx.ipic.simsr [0] = 0;
mpc83xx.ipic.simsr [1] = 0; mpc83xx.ipic.simsr [1] = 0;
mpc83xx.ipic.semsr = 0; mpc83xx.ipic.semsr = 0;
mpc83xx.ipic.sermr = 0; mpc83xx.ipic.sermr = 0;
/* /*
* set desired configuration as defined in bspopts.h * set desired configuration as defined in bspopts.h
* normally, the default values should be fine * normally, the default values should be fine
*/ */
#if defined( BSP_SICFR_VAL) /* defined in bspopts.h ? */ #if defined( BSP_SICFR_VAL) /* defined in bspopts.h ? */
mpc83xx.ipic.sicfr = BSP_SICFR_VAL; mpc83xx.ipic.sicfr = BSP_SICFR_VAL;
#endif #endif
/* /*
* set desired priorities as defined in bspopts.h * set desired priorities as defined in bspopts.h
* normally, the default values should be fine * normally, the default values should be fine
*/ */
#if defined( BSP_SIPRR0_VAL) /* defined in bspopts.h ? */ #if defined( BSP_SIPRR0_VAL) /* defined in bspopts.h ? */
mpc83xx.ipic.siprr [0] = BSP_SIPRR0_VAL; mpc83xx.ipic.siprr [0] = BSP_SIPRR0_VAL;
#endif #endif
#if defined( BSP_SIPRR1_VAL) /* defined in bspopts.h ? */ #if defined( BSP_SIPRR1_VAL) /* defined in bspopts.h ? */
mpc83xx.ipic.siprr [1] = BSP_SIPRR1_VAL; mpc83xx.ipic.siprr [1] = BSP_SIPRR1_VAL;
#endif #endif
#if defined( BSP_SIPRR2_VAL) /* defined in bspopts.h ? */ #if defined( BSP_SIPRR2_VAL) /* defined in bspopts.h ? */
mpc83xx.ipic.siprr [2] = BSP_SIPRR2_VAL; mpc83xx.ipic.siprr [2] = BSP_SIPRR2_VAL;
#endif #endif
#if defined( BSP_SIPRR3_VAL) /* defined in bspopts.h ? */ #if defined( BSP_SIPRR3_VAL) /* defined in bspopts.h ? */
mpc83xx.ipic.siprr [3] = BSP_SIPRR3_VAL; mpc83xx.ipic.siprr [3] = BSP_SIPRR3_VAL;
#endif #endif
#if defined( BSP_SMPRR0_VAL) /* defined in bspopts.h ? */ #if defined( BSP_SMPRR0_VAL) /* defined in bspopts.h ? */
mpc83xx.ipic.smprr [0] = BSP_SMPRR0_VAL; mpc83xx.ipic.smprr [0] = BSP_SMPRR0_VAL;
#endif #endif
#if defined( BSP_SMPRR1_VAL) /* defined in bspopts.h ? */ #if defined( BSP_SMPRR1_VAL) /* defined in bspopts.h ? */
mpc83xx.ipic.smprr [1] = BSP_SMPRR1_VAL; mpc83xx.ipic.smprr [1] = BSP_SMPRR1_VAL;
#endif #endif
#if defined( BSP_SECNR_VAL) /* defined in bspopts.h ? */ #if defined( BSP_SECNR_VAL) /* defined in bspopts.h ? */
mpc83xx.ipic.secnr = BSP_SECNR_VAL; mpc83xx.ipic.secnr = BSP_SECNR_VAL;
#endif #endif
/* /*
* calculate priority masks * calculate priority masks
*/ */
return mpc83xx_ipic_calc_prio2mask(); return mpc83xx_ipic_calc_prio2mask();
} }
int mpc83xx_exception_handler( BSP_Exception_frame *frame, unsigned exception_number) static int mpc83xx_exception_handler(
BSP_Exception_frame *frame,
unsigned exception_number
)
{ {
return BSP_irq_handle_at_ipic( exception_number); return BSP_irq_handle_at_ipic( exception_number);
} }
rtems_status_code bsp_interrupt_facility_initialize() rtems_status_code bsp_interrupt_facility_initialize()
{ {
/* Install exception handler */ /* Install exception handler */
if (ppc_exc_set_handler( ASM_EXT_VECTOR, mpc83xx_exception_handler)) { if (ppc_exc_set_handler( ASM_EXT_VECTOR, mpc83xx_exception_handler)) {
return RTEMS_IO_ERROR; return RTEMS_IO_ERROR;
} }
if (ppc_exc_set_handler( ASM_E300_SYSMGMT_VECTOR, mpc83xx_exception_handler)) { if (ppc_exc_set_handler( ASM_E300_SYSMGMT_VECTOR, mpc83xx_exception_handler)) {
return RTEMS_IO_ERROR; return RTEMS_IO_ERROR;
} }
if (ppc_exc_set_handler( ASM_E300_CRIT_VECTOR, mpc83xx_exception_handler)) { if (ppc_exc_set_handler( ASM_E300_CRIT_VECTOR, mpc83xx_exception_handler)) {
return RTEMS_IO_ERROR; return RTEMS_IO_ERROR;
} }
/* Initialize the interrupt controller */ /* Initialize the interrupt controller */
return mpc83xx_ipic_initialize(); return mpc83xx_ipic_initialize();
} }

View File

@@ -23,22 +23,18 @@
#include <bsp/irq.h> #include <bsp/irq.h>
#include <bsp.h> #include <bsp.h>
#if defined( MPC83XX_BOARD_MPC8313ERDB) #if defined(MPC83XX_BOARD_MPC8313ERDB)
#include <libchip/spi-sd-card.h> #include <libchip/spi-sd-card.h>
#elif defined( MPC83XX_BOARD_MPC8349EAMDS) #elif defined(MPC83XX_BOARD_MPC8349EAMDS)
#include <libchip/spi-flash-m25p40.h> #include <libchip/spi-flash-m25p40.h>
#elif defined( MPC83XX_BOARD_HSC_CM01) #elif defined(MPC83XX_BOARD_HSC_CM01)
#include <libchip/spi-fram-fm25l256.h> #include <libchip/spi-fram-fm25l256.h>
#else
#warning No SPI configuration available
#endif #endif
/*=========================================================================*\ /*=========================================================================*\
@@ -296,11 +292,11 @@ rtems_status_code bsp_register_spi
| 0 or error code | | 0 or error code |
\*=========================================================================*/ \*=========================================================================*/
{ {
#if defined(MPC83XX_BOARD_MPC8313ERDB) #if defined(MPC83XX_BOARD_MPC8313ERDB)
rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_status_code sc = RTEMS_SUCCESSFUL;
#endif #endif
int ret_code;
unsigned spi_busno; unsigned spi_busno;
int ret_code;
/* /*
* init I2C library (if not already done) * init I2C library (if not already done)
@@ -311,7 +307,7 @@ rtems_status_code bsp_register_spi
* init port pins used to address/select SPI devices * init port pins used to address/select SPI devices
*/ */
#if defined( MPC83XX_BOARD_MPC8313ERDB) #if defined(MPC83XX_BOARD_MPC8313ERDB)
/* /*
* Configured as master (direct connection to SD card) * Configured as master (direct connection to SD card)
@@ -335,7 +331,7 @@ rtems_status_code bsp_register_spi
/* Open Drain */ /* Open Drain */
/* mpc83xx.gpio [0].gpdr |= 0x0000000f; */ /* mpc83xx.gpio [0].gpdr |= 0x0000000f; */
#elif defined( MPC83XX_BOARD_MPC8349EAMDS) #elif defined(MPC83XX_BOARD_MPC8349EAMDS)
/* /*
* GPIO1[0] is nSEL_SPI for M25P40 * GPIO1[0] is nSEL_SPI for M25P40
@@ -345,7 +341,7 @@ rtems_status_code bsp_register_spi
mpc83xx.gpio[0].gpdir |= (1 << (31- 0)); mpc83xx.gpio[0].gpdir |= (1 << (31- 0));
mpc83xx.gpio[0].gpdr &= ~(1 << (31- 0)); mpc83xx.gpio[0].gpdr &= ~(1 << (31- 0));
#elif defined( MPC83XX_BOARD_HSC_CM01) #elif defined(MPC83XX_BOARD_HSC_CM01)
/* /*
* GPIO1[24] is SPI_A0 * GPIO1[24] is SPI_A0
@@ -358,6 +354,12 @@ rtems_status_code bsp_register_spi
mpc83xx.gpio[0].gpdir |= (0xf << (31-27)); mpc83xx.gpio[0].gpdir |= (0xf << (31-27));
mpc83xx.gpio[0].gpdr &= ~(0xf << (31-27)); mpc83xx.gpio[0].gpdr &= ~(0xf << (31-27));
#else
/*
* There is no SPI configuration information for this variant.
*/
(void) spi_busno; /* avoid set but not used warning */
#endif #endif
/* /*