summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-17 09:23:59 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-19 09:59:38 +0100
commit801b5d80325dbd3e92218271d54e75f389da7136 (patch)
treed804e85db347bafd1c7b52b086beff7b6d61c170 /c
parentscore: Move SMP interrupt stack initialization (diff)
downloadrtems-801b5d80325dbd3e92218271d54e75f389da7136.tar.bz2
powerpc: Change interrupt disable implemetation
Instead of SPRG0 (= special purpose register 272) use the new global symbol _PPC_INTERRUPT_DISABLE_MASK to store the interrupt disable mask. The benefit is that it is now possible to disable interrupts without further run-time initialization in boot_card(). At least on Freescale e500 cores this leads also to a faster execution since the mfmsr and mfspr instruction require four cycles to complete. The instructions to load the mask value can execute while the mfmsr is in progress.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c6
-rw-r--r--c/src/lib/libbsp/powerpc/ep1a/startup/bspstart.c6
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/haleakala/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/mbx8xx/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/mpc8260ads/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/mvme3100/startup/bspstart.c6
-rw-r--r--c/src/lib/libbsp/powerpc/mvme5500/startup/bspstart.c6
-rw-r--r--c/src/lib/libbsp/powerpc/psim/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/qemuppc/startup/bspstart.c6
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/startup/smp.c1
-rw-r--r--c/src/lib/libbsp/powerpc/score603e/startup/bspstart.c6
-rw-r--r--c/src/lib/libbsp/powerpc/shared/startup/bspstart.c6
-rw-r--r--c/src/lib/libbsp/powerpc/t32mppc/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c6
-rw-r--r--c/src/lib/libbsp/powerpc/virtex/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/powerpc/virtex4/startup/bspstart.c4
-rw-r--r--c/src/lib/libbsp/powerpc/virtex5/startup/bspstart.c4
-rw-r--r--c/src/lib/libbsp/shared/bootcard.c8
-rw-r--r--c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c3
-rw-r--r--c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h3
24 files changed, 10 insertions, 71 deletions
diff --git a/c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c b/c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c
index 763c9d805e..d2501b55dc 100644
--- a/c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c
@@ -242,11 +242,7 @@ void bsp_start( void )
/*
* Initialize default raw exception handlers. See vectors/vectors_init.c
*/
- ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize
- );
+ ppc_exc_initialize(intrStackStart, intrStackSize);
printk("CPU: %s\n", get_ppc_cpu_type_name(current_ppc_cpu));
diff --git a/c/src/lib/libbsp/powerpc/ep1a/startup/bspstart.c b/c/src/lib/libbsp/powerpc/ep1a/startup/bspstart.c
index b22a743843..1098de29ec 100644
--- a/c/src/lib/libbsp/powerpc/ep1a/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/ep1a/startup/bspstart.c
@@ -323,11 +323,7 @@ ShowBATS();
/*
* Initialize default raw exception hanlders.
*/
- ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize
- );
+ ppc_exc_initialize(intrStackStart, intrStackSize);
/*
* Init MMU block address translation to enable hardware
diff --git a/c/src/lib/libbsp/powerpc/gen5200/startup/bspstart.c b/c/src/lib/libbsp/powerpc/gen5200/startup/bspstart.c
index 56de4a5aca..8324b44dc9 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/gen5200/startup/bspstart.c
@@ -170,7 +170,6 @@ void bsp_start(void)
/* Initialize exception handler */
ppc_exc_cache_wb_check = 0;
ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) bsp_interrupt_stack_start,
(uintptr_t) bsp_interrupt_stack_size
);
diff --git a/c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c b/c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c
index 9abf1733f4..abdc2e2a13 100644
--- a/c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c
@@ -136,7 +136,6 @@ void bsp_start( void)
ppc_exc_cache_wb_check = 0;
#endif
ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) bsp_section_work_begin,
rtems_configuration_get_interrupt_stack_size()
);
diff --git a/c/src/lib/libbsp/powerpc/haleakala/startup/bspstart.c b/c/src/lib/libbsp/powerpc/haleakala/startup/bspstart.c
index fc7e932b28..3dfecb6826 100644
--- a/c/src/lib/libbsp/powerpc/haleakala/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/haleakala/startup/bspstart.c
@@ -206,7 +206,6 @@ void bsp_start( void )
* Initialize default raw exception handlers.
*/
ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) intrStack_start,
(uintptr_t) intrStack_size
);
diff --git a/c/src/lib/libbsp/powerpc/mbx8xx/startup/bspstart.c b/c/src/lib/libbsp/powerpc/mbx8xx/startup/bspstart.c
index 6216754184..ffa8500f61 100644
--- a/c/src/lib/libbsp/powerpc/mbx8xx/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/mbx8xx/startup/bspstart.c
@@ -114,7 +114,6 @@ void bsp_start(void)
/* Initialize exception handler */
ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) IntrStack_start,
(uintptr_t) intrStack - (uintptr_t) IntrStack_start
);
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c
index 7f4f93524d..ed3ef537b5 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c
@@ -108,7 +108,6 @@ void bsp_start(void)
/* Initialize exceptions */
ppc_exc_initialize_with_vector_base(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) bsp_section_work_begin,
rtems_configuration_get_interrupt_stack_size(),
mpc55xx_exc_vector_base
diff --git a/c/src/lib/libbsp/powerpc/mpc8260ads/startup/bspstart.c b/c/src/lib/libbsp/powerpc/mpc8260ads/startup/bspstart.c
index ef18cee7fd..81c6809003 100644
--- a/c/src/lib/libbsp/powerpc/mpc8260ads/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/mpc8260ads/startup/bspstart.c
@@ -174,7 +174,6 @@ void bsp_start(void)
/* Initialize exception handler */
/* FIXME: Interrupt stack begin and size */
ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) IntrStack_start,
(uintptr_t) intrStack - (uintptr_t) IntrStack_start
);
diff --git a/c/src/lib/libbsp/powerpc/mvme3100/startup/bspstart.c b/c/src/lib/libbsp/powerpc/mvme3100/startup/bspstart.c
index 78b79baa0b..71e72f2fe0 100644
--- a/c/src/lib/libbsp/powerpc/mvme3100/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/mvme3100/startup/bspstart.c
@@ -270,11 +270,7 @@ VpdBufRec vpdData [] = {
/*
* Initialize default raw exception handlers.
*/
- ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize
- );
+ ppc_exc_initialize(intrStackStart, intrStackSize);
printk("CPU 0x%x - rev 0x%x\n", myCpu, myCpuRevision);
diff --git a/c/src/lib/libbsp/powerpc/mvme5500/startup/bspstart.c b/c/src/lib/libbsp/powerpc/mvme5500/startup/bspstart.c
index 06e48604c5..7b97906661 100644
--- a/c/src/lib/libbsp/powerpc/mvme5500/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/mvme5500/startup/bspstart.c
@@ -245,11 +245,7 @@ void bsp_start( void )
/*
* Initialize default raw exception handlers.
*/
- ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize
- );
+ ppc_exc_initialize(intrStackStart, intrStackSize);
/*
* Init MMU block address translation to enable hardware
diff --git a/c/src/lib/libbsp/powerpc/psim/startup/bspstart.c b/c/src/lib/libbsp/powerpc/psim/startup/bspstart.c
index b156f4d901..881d79a175 100644
--- a/c/src/lib/libbsp/powerpc/psim/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/psim/startup/bspstart.c
@@ -99,7 +99,6 @@ void bsp_start( void )
* Initialize default raw exception handlers.
*/
ppc_exc_initialize_with_vector_base(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) bsp_section_work_begin,
rtems_configuration_get_interrupt_stack_size(),
(void *) 0xfff00000
diff --git a/c/src/lib/libbsp/powerpc/qemuppc/startup/bspstart.c b/c/src/lib/libbsp/powerpc/qemuppc/startup/bspstart.c
index 62c5931e0c..878defa02a 100644
--- a/c/src/lib/libbsp/powerpc/qemuppc/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/qemuppc/startup/bspstart.c
@@ -94,11 +94,7 @@ void bsp_start( void )
/*
* Initialize default raw exception handlers.
*/
- ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize
- );
+ ppc_exc_initialize(intrStackStart, intrStackSize);
/* Install default handler for the decrementer exception */
sc = ppc_exc_set_handler( ASM_DEC_VECTOR, default_decrementer_exception_handler);
diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c b/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
index fe726e368a..f5145588c8 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
@@ -110,7 +110,6 @@ void bsp_start(void)
/* Initialize exception handler */
ppc_exc_initialize_with_vector_base(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) bsp_section_work_begin,
rtems_configuration_get_interrupt_stack_size(),
bsp_exc_vector_base
diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c b/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c
index 9caaa99a01..38a7305ea7 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c
+++ b/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c
@@ -116,7 +116,6 @@ void qoriq_secondary_cpu_initialize(void)
/* Initialize exception handler */
ppc_exc_initialize_with_vector_base(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) second_cpu->interrupt_stack_low,
rtems_configuration_get_interrupt_stack_size(),
bsp_exc_vector_base
diff --git a/c/src/lib/libbsp/powerpc/score603e/startup/bspstart.c b/c/src/lib/libbsp/powerpc/score603e/startup/bspstart.c
index 3519a59f3b..8caf955835 100644
--- a/c/src/lib/libbsp/powerpc/score603e/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/score603e/startup/bspstart.c
@@ -194,11 +194,7 @@ void bsp_start( void )
/*
* Initialize default raw exception handlers.
*/
- ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize
- );
+ ppc_exc_initialize(intrStackStart, intrStackSize);
msr_value = 0x2030;
_CPU_MSR_SET( msr_value );
diff --git a/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c b/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c
index abdb774c1f..e8bd070402 100644
--- a/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c
@@ -232,11 +232,7 @@ void bsp_start( void )
/*
* Initialize default raw exception handlers.
*/
- ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize
- );
+ ppc_exc_initialize(intrStackStart, intrStackSize);
boardManufacturer = checkPrepBoardType(&residualCopy);
if (boardManufacturer != PREP_Motorola) {
diff --git a/c/src/lib/libbsp/powerpc/t32mppc/startup/bspstart.c b/c/src/lib/libbsp/powerpc/t32mppc/startup/bspstart.c
index 6d2196a301..6b6dd1caaf 100644
--- a/c/src/lib/libbsp/powerpc/t32mppc/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/t32mppc/startup/bspstart.c
@@ -68,7 +68,6 @@ void bsp_start(void)
/* Initialize exception handler */
ppc_exc_initialize_with_vector_base(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) bsp_section_work_begin,
rtems_configuration_get_interrupt_stack_size(),
bsp_exc_vector_base
diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c b/c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c
index 0c3a760d17..af014c6d24 100644
--- a/c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c
@@ -183,11 +183,7 @@ void bsp_start( void)
rtems_counter_initialize_converter(bsp_time_base_frequency);
/* Initialize exception handler */
- ppc_exc_initialize(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- interrupt_stack_start,
- interrupt_stack_size
- );
+ ppc_exc_initialize(interrupt_stack_start, interrupt_stack_size);
/* Initalize interrupt support */
bsp_interrupt_initialize();
diff --git a/c/src/lib/libbsp/powerpc/virtex/startup/bspstart.c b/c/src/lib/libbsp/powerpc/virtex/startup/bspstart.c
index b29509f7f5..1625428848 100644
--- a/c/src/lib/libbsp/powerpc/virtex/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/virtex/startup/bspstart.c
@@ -95,7 +95,6 @@ void bsp_start( void )
* Initialize default raw exception handlers.
*/
ppc_exc_initialize_with_vector_base(
- PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
(uintptr_t) bsp_section_work_begin,
rtems_configuration_get_interrupt_stack_size(),
virtex_exc_vector_base
diff --git a/c/src/lib/libbsp/powerpc/virtex4/startup/bspstart.c b/c/src/lib/libbsp/powerpc/virtex4/startup/bspstart.c
index 7628e8d3b9..85f7847599 100644
--- a/c/src/lib/libbsp/powerpc/virtex4/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/virtex4/startup/bspstart.c
@@ -208,9 +208,7 @@ void bsp_start(void)
intrStackStart = CPU_UP_ALIGN((uint32_t)__bsp_ram_start);
intrStackSize = rtems_configuration_get_interrupt_stack_size();
- ppc_exc_initialize(PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize);
+ ppc_exc_initialize(intrStackStart, intrStackSize);
/* Let the user know what parameters we were compiled with */
printk(" Base/Start End Size\n"
diff --git a/c/src/lib/libbsp/powerpc/virtex5/startup/bspstart.c b/c/src/lib/libbsp/powerpc/virtex5/startup/bspstart.c
index 9a041cac62..4ff5b2e396 100644
--- a/c/src/lib/libbsp/powerpc/virtex5/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/virtex5/startup/bspstart.c
@@ -228,9 +228,7 @@ void bsp_start(void)
intrStackStart = CPU_UP_ALIGN((uint32_t)__bsp_ram_start);
intrStackSize = rtems_configuration_get_interrupt_stack_size();
- ppc_exc_initialize(PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
- intrStackStart,
- intrStackSize);
+ ppc_exc_initialize(intrStackStart, intrStackSize);
/* Let the user know what parameters we were compiled with */
printk(" Base/Start End Size\n"
diff --git a/c/src/lib/libbsp/shared/bootcard.c b/c/src/lib/libbsp/shared/bootcard.c
index 8a21bc00e0..7693a18de5 100644
--- a/c/src/lib/libbsp/shared/bootcard.c
+++ b/c/src/lib/libbsp/shared/bootcard.c
@@ -69,14 +69,6 @@ void boot_card(
rtems_interrupt_level bsp_isr_level;
/*
- * Special case for PowerPC: The interrupt disable mask is stored in SPRG0.
- * It must be valid before we can use rtems_interrupt_disable().
- */
- #ifdef PPC_INTERRUPT_DISABLE_MASK_DEFAULT
- ppc_interrupt_set_disable_mask( PPC_INTERRUPT_DISABLE_MASK_DEFAULT );
- #endif /* PPC_INTERRUPT_DISABLE_MASK_DEFAULT */
-
- /*
* Make sure interrupts are disabled.
*/
(void) bsp_isr_level;
diff --git a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c
index d0f911665d..07dfbeaf6b 100644
--- a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c
+++ b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c
@@ -149,7 +149,6 @@ static void ppc_exc_fatal_error(void)
}
void ppc_exc_initialize_with_vector_base(
- uint32_t interrupt_disable_mask,
uintptr_t interrupt_stack_begin,
uintptr_t interrupt_stack_size,
void *vector_base
@@ -191,8 +190,6 @@ void ppc_exc_initialize_with_vector_base(
PPC_SET_SPECIAL_PURPOSE_REGISTER(SPRG1, interrupt_stack_pointer);
PPC_SET_SPECIAL_PURPOSE_REGISTER(SPRG2, interrupt_stack_begin);
- ppc_interrupt_set_disable_mask(interrupt_disable_mask);
-
#ifndef PPC_EXC_CONFIG_BOOKE_ONLY
/* Use current MMU / RI settings when running C exception handlers */
diff --git a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h
index bec81c1517..d928d70662 100644
--- a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h
+++ b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h
@@ -361,7 +361,6 @@ rtems_status_code ppc_exc_make_prologue(
* @see ppc_exc_initialize().
*/
void ppc_exc_initialize_with_vector_base(
- uint32_t interrupt_disable_mask,
uintptr_t interrupt_stack_begin,
uintptr_t interrupt_stack_size,
void *vector_base
@@ -381,13 +380,11 @@ void ppc_exc_initialize_with_vector_base(
* - the minimal prologue creation failed.
*/
static inline void ppc_exc_initialize(
- uint32_t interrupt_disable_mask,
uintptr_t interrupt_stack_begin,
uintptr_t interrupt_stack_size
)
{
ppc_exc_initialize_with_vector_base(
- interrupt_disable_mask,
interrupt_stack_begin,
interrupt_stack_size,
NULL