Commit Graph

26029 Commits

Author SHA1 Message Date
Sebastian Huber
9abbb6ab97 tmtests/tmcontext01: New test 2014-02-28 09:06:20 +01:00
Sebastian Huber
9ec4a48dde bsp/leon3: Add L2 cache support 2014-02-28 09:06:19 +01:00
Sebastian Huber
c5b1e208c5 bsp/leon3: Add L2C registers 2014-02-28 09:06:19 +01:00
Sebastian Huber
64f4ac28a6 bsp/leon3: Add new cache manager implementation
The previous implementation used an instruction cache line size of 0,
this is a bogus value.  Use a instruction cache line size of 64 since
the L2 cache may have a line size of 32 or 64.  A greater value should
cause no harm.

Use a FLUSH operation for _CPU_cache_invalidate_instruction_range().

This is a preperation step to support the L2 cache.
2014-02-28 09:06:19 +01:00
Sebastian Huber
80186ca8f4 bsp/leon3: Add and use cache register functions 2014-02-28 09:06:19 +01:00
Sebastian Huber
e1d7bf002e rtems: Add cache size functions
Add rtems_cache_get_data_cache_size() and
rtems_cache_get_instruction_cache_size().
2014-02-28 09:06:16 +01:00
Sebastian Huber
e7549ff4a1 rtems: Use size_t for cache line size
A cache line cannot have a negative size.
2014-02-28 08:59:02 +01:00
Sebastian Huber
5e8301da86 rtems: Cache manager documentation
Move useful functions to the top of the file.
2014-02-28 08:59:02 +01:00
Sebastian Huber
31494ab264 sptests/spcache01: Detect write-through cache 2014-02-28 08:59:02 +01:00
Sebastian Huber
0a2096b7e3 bsp/leon3: Use ambapp_freq_get() for CPU counter 2014-02-28 08:59:01 +01:00
Sebastian Huber
dce7bba732 bsps: Delete LEON3_FATAL_CPU_COUNTER_INIT 2014-02-28 08:59:01 +01:00
Sebastian Huber
6faf789314 bsps: Fix empty interrupt handler entry
The vector number of spurious interrupts was wrong after the interrupt
handler removal on SMP configurations.
2014-02-28 08:59:01 +01:00
Sebastian Huber
3378be955a sptests/spcache01: New test 2014-02-24 16:12:03 +01:00
Sebastian Huber
a4bc90af4e sparc: Fix CPU counter support
The SPARC processors supported by RTEMS have no built-in CPU counter
support.  We have to use some hardware counter module for this purpose.
The BSP must provide a 32-bit register which contains the current CPU
counter value and a function for the difference calculation.  It can use
for example the GPTIMER instance used for the clock driver.
2014-02-24 16:12:02 +01:00
Sebastian Huber
95d0c98cac score: Fix thread TLS area initialization
Do not use _TLS_Size here since this will lead GCC to assume that this
symbol is not 0 and the later > 0 test will be optimized away.
2014-02-24 12:50:32 +01:00
Sebastian Huber
07dc9709a4 sptests/spcpucounter01: Adjust test
Adjust test to work with clock driver based CPU counters.  They have a
period equal to the clock tick interval.
2014-02-24 12:49:45 +01:00
Sebastian Huber
0b9fd991a7 bsps: Add empty cache manager
This is necessary to add tests that use the cache manager.  For example
to get better estimates of worst-case timings.
2014-02-24 12:49:45 +01:00
Sebastian Huber
0fe0718b72 bsps/powerpc: Use System V small-data area
The 32-bit ABIs for thread-local storage (TLS) and EABI read-only
small-data area have a conflicting register (r2) usage.  Use the System
V small-data instead (here r2 is system reserved).
2014-02-24 12:49:42 +01:00
Sebastian Huber
07713db65b bsp/leon3: Add bsp_reset() for SMP configuration 2014-02-21 09:38:56 +01:00
Sebastian Huber
7ec8d95a1e bsp/leon3: Add and use leon3_get_cpu_count() 2014-02-21 09:38:56 +01:00
Sebastian Huber
4fe6759e2a bsp/leon3: Add leon3_power_down_loop() 2014-02-21 09:38:56 +01:00
Sebastian Huber
c8c877f8cb bsps/sparc: Delete unused file 2014-02-21 09:38:56 +01:00
Sebastian Huber
1be15db1ff bsp/score603e: Remove unused BSP_fatal_return() 2014-02-21 09:38:55 +01:00
Sebastian Huber
47d6013417 score: _CPU_SMP_Get_current_processor()
Remove RTEMS_COMPILER_PURE_ATTRIBUTE from _SMP_Get_current_processor()
and all _CPU_SMP_Get_current_processor().  Make inline ASM statements
volatile again.  Test smptests/smpmigration01 showed that GCC optimizes
too much otherwise.
2014-02-21 09:38:54 +01:00
Sebastian Huber
7ee4e72e4b score: _Thread_Start_multitasking()
Fix serious race-condition.  Read the heir after the per-CPU lock
acquire.
2014-02-21 09:38:25 +01:00
Sebastian Huber
83bf105486 score: Rename _Internal_error_Occurred()
Rename _Internal_error_Occurred() into _Terminate().
2014-02-21 09:38:24 +01:00
Jennifer Averett
52eecbaa08 posix: Set pthread attribute values in detach and setschedparm methods. 2014-02-19 10:36:01 -06:00
Sebastian Huber
2cb0877f3a bsp/leon3: Add and use LEON3_IrqCtrl_Lock
Disabling of interrupts is not enough to ensure mutual exclusion on SMP
configurations.
2014-02-19 10:25:47 +01:00
Sebastian Huber
8a65a96007 score: _SMP_Inter_processor_interrupt_handler()
Inline _SMP_Inter_processor_interrupt_handler() to avoid function call
overhead.  Remove debug output.
2014-02-19 09:59:42 +01:00
Sebastian Huber
c4ff0271e7 score: Wait for per-CPU state changes later
Wait for per-CPU changes into PER_CPU_STATE_READY_TO_BEGIN_MULTITASKING
later.  There is no need to delay the initialization of the main
processor at this point.
2014-02-19 09:59:42 +01:00
Sebastian Huber
b1d08a58b2 score: Initialize per-CPU locks 2014-02-19 09:59:42 +01:00
Sebastian Huber
282bfd3b41 score: Move _SMP_Handler_initialize() 2014-02-19 09:59:42 +01:00
Sebastian Huber
a171e0a867 bsp/leon3: Declare LEON3_IrqCtrl_EIrq only once 2014-02-19 09:59:41 +01:00
Sebastian Huber
f71f3d3196 bsp/leon3: Declare leon3_ext_irq_init() in header 2014-02-19 09:59:41 +01:00
Sebastian Huber
4d9bd56d29 score: Rename rtems_smp_process_interrupt()
Rename rtems_smp_process_interrupt() into
_SMP_Inter_processor_interrupt_handler().  Delete unused header file
<rtems/bspsmp.h>.
2014-02-19 09:59:41 +01:00
Sebastian Huber
911b1d228b score: Rename rtems_smp_secondary_cpu_initialize()
Rename rtems_smp_secondary_cpu_initialize() into
_SMP_Start_multitasking_on_secondary_processor().  Move declaration to
<rtems/score/smpimpl.h>.
2014-02-19 09:59:41 +01:00
Sebastian Huber
6ca4f6af8a score: Add and use <rtems/score/smpimpl.h>
Collect SMP implementation specific parts in the
<rtems/score/smpimpl.h> header file.
2014-02-19 09:59:41 +01:00
Sebastian Huber
f8ff2a011c score: Delete bsp_smp_broadcast_interrupt()
Since the per-CPU SMP lock must be acquired and released to send the
message a single interrupt broadcast operations offers no benefits.  If
synchronization is required, then a SMP barrier must be used anyway.
2014-02-19 09:59:41 +01:00
Sebastian Huber
4627fcdab1 score: Rename bsp_smp_initialize()
Rename bsp_smp_initialize() into _CPU_SMP_Initialize() since every CPU
port must supply this function.
2014-02-19 09:59:40 +01:00
Sebastian Huber
2afe065785 score: Remove ASM guard 2014-02-19 09:59:40 +01:00
Sebastian Huber
2cb95b5f0a score: Rename RTEMS_BSP_SMP_SHUTDOWN
Rename RTEMS_BSP_SMP_SHUTDOWN in SMP_MESSAGE_SHUTDOWN since SMP messages
have nothing to do with the BSP.  Use UINT32_C() instead of casts.
2014-02-19 09:59:40 +01:00
Sebastian Huber
9eec2f33e9 score: Add RTEMS_FATAL_SOURCE_SMP
Use rtems_fatal() instead of _CPU_Fatal_halt() to shutdown processors in
SMP configurations since this allows intervention of BSP or application
specific fatal extensions.
2014-02-19 09:59:40 +01:00
Sebastian Huber
46d7fa5cd3 bsp/leon3: Add and use fatal codes 2014-02-19 09:59:40 +01:00
Sebastian Huber
33cb8bf64d score: Add RTEMS_FATAL_SOURCE_BSP
Merge RTEMS_FATAL_SOURCE_BSP_GENERIC and RTEMS_FATAL_SOURCE_BSP_SPECIFIC
into new fatal source RTEMS_FATAL_SOURCE_BSP.  This makes it easier to
figure out the code position given a fatal source and code.
2014-02-19 09:59:39 +01:00
Sebastian Huber
b39e055a49 score: Delete INTERNAL_ERROR_SHUTDOWN_WHEN_NOT_UP
This error case is no longer required since rtems_shutdown_executive()
can be called anytime, anywhere
2014-02-19 09:59:39 +01:00
Sebastian Huber
8a6de83fd8 score: Move _SMP_Request_other_cores_to_shutdown()
Move _SMP_Request_other_cores_to_shutdown() invocation from
rtems_shutdown_executive() to _Internal_error_Occurred() to allow a
proper shutdown on SMP configurations even in the error case.
2014-02-19 09:59:39 +01:00
Sebastian Huber
38ee75853f score: Disable ISR in _Internal_error_Occurred()
Disable interrupts as the first step in _Internal_error_Occurred() to
get a defined execution context for the fatal extensions.

Make _ISR_Disable_without_giant() available for non-SMP configurations.
2014-02-19 09:59:39 +01:00
Sebastian Huber
514705d2f1 score: Delete _Thread_BSP_context
Do not return to BSP context in the exit() shutdown path.  This makes it
possible to re-use the initialization stack.  It can be used for the
interrupt stack for example.  On targets with a small RAM this is a
considerable benefit.

This change eliminates also some special cases and simplifies the code.

Delete _Thread_Set_global_exit_status(),
_Thread_Get_global_exit_status() and _Thread_Stop_multitasking().
2014-02-19 09:59:39 +01:00
Sebastian Huber
92f50c3b29 score: Add SYSTEM_STATE_TERMINATED
Merge systems states SYSTEM_STATE_SHUTDOWN and SYSTEM_STATE_FAILED into
new system state SYSTEM_STATE_TERMINATED.  This reflects that all system
termination paths end up in _Internal_error_Occurred().
2014-02-19 09:59:38 +01:00
Sebastian Huber
801b5d8032 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.
2014-02-19 09:59:38 +01:00