Commit Graph

40 Commits

Author SHA1 Message Date
Sebastian Huber
3e2647a714 powerpc: AltiVec and FPU context support
Add AltiVec and FPU support to the Context_Control in case we use the
e6500 multilib.

Add PPC_MULTILIB_ALTIVEC and PPC_MULTILIB_FPU multilib defines.  Add
non-volatile AltiVec and FPU context to Context_Control.  Add save/restore of
non-volatile AltiVec and FPU to _CPU_Context_switch().  Add save/restore
of volatile AltiVec and FPU context to the exception code.  Adjust data
cache optimizations for the new context and cache line size.
2015-01-13 11:37:28 +01:00
Joel Sherrill
78a38fa2ae Eliminate use of /*PAGE and clean up formatting 2014-10-09 10:11:58 -05:00
Sebastian Huber
11b05f11d4 score: Fix CPU context usage on SMP
We must not alter the is executing indicator in
_CPU_Context_Initialize() since this would cause an invalid state during
a self restart.

The is executing indicator must be valid at creation time since
otherwise _Thread_Kill_zombies() uses an undefined value for not started
threads.  This could result in a system life lock.
2014-05-08 13:02:40 +02:00
Sebastian Huber
38b59a6d30 score: Implement forced thread migration
The current implementation of task migration in RTEMS has some
implications with respect to the interrupt latency. It is crucial to
preserve the system invariant that a task can execute on at most one
processor in the system at a time. This is accomplished with a boolean
indicator in the task context. The processor architecture specific
low-level task context switch code will mark that a task context is no
longer executing and waits that the heir context stopped execution
before it restores the heir context and resumes execution of the heir
task. So there is one point in time in which a processor is without a
task. This is essential to avoid cyclic dependencies in case multiple
tasks migrate at once. Otherwise some supervising entity is necessary to
prevent life-locks. Such a global supervisor would lead to scalability
problems so this approach is not used. Currently the thread dispatch is
performed with interrupts disabled. So in case the heir task is
currently executing on another processor then this prolongs the time of
disabled interrupts since one processor has to wait for another
processor to make progress.

It is difficult to avoid this issue with the interrupt latency since
interrupts normally store the context of the interrupted task on its
stack. In case a task is marked as not executing we must not use its
task stack to store such an interrupt context. We cannot use the heir
stack before it stopped execution on another processor. So if we enable
interrupts during this transition we have to provide an alternative task
independent stack for this time frame. This issue needs further
investigation.
2014-05-07 14:26:28 +02:00
Sebastian Huber
320faf8e68 score: Clarify TLS support 2014-04-17 08:06:40 +02:00
Chris Johns
c49985691f Change all references of rtems.com to rtems.org. 2014-03-21 08:10:47 +11:00
Sebastian Huber
022851aba5 Add thread-local storage (TLS) support
Tested and implemented on ARM, m68k, PowerPC and SPARC.  Other
architectures need more work.
2014-02-04 10:06:35 +01:00
Sebastian Huber
39a4574652 powerpc: Add r2 to CPU context
The r2 may be used for thread-local storage.
2013-11-18 14:56:43 +01:00
Sebastian Huber
56435e646c powerpc: Fix Altivec support
Use the right context.
2013-06-26 10:31:43 +02:00
Sebastian Huber
b31a9603e0 score: Add INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR
Use INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR on PowerPC for
_CPU_ISR_install_vector().
2012-11-15 15:33:11 +01:00
Sebastian Huber
00dae1866d powerpc: Delete _CPU_Install_interrupt_stack()
This function is only used if CPU_HAS_HARDWARE_INTERRUPT_STACK == TRUE.
2012-11-14 14:06:59 +01:00
Sebastian Huber
1869bb7101 powerpc: Simplify context switch
PowerPC cores with the SPE (Signal Processing Extension) have 64-bit
general-purpose registers.  The SPE context switch code has been merged
with the standard context switch code.  The context switch may use cache
operations to increase the performance.  It will be ensured that the
context is 32-byte aligned (PPC_DEFAULT_CACHE_LINE_SIZE).  This
increases the overall memory size of the context area in the thread
control block slightly.  The general-purpose registers GPR2 and GPR13
are no longer part of the context.  The BSP must initialize these
registers during startup (usually initialized by the __eabi() function).

The new BSP option BSP_USE_DATA_CACHE_BLOCK_TOUCH can be used to enable
the dcbt instruction in the context switch.

The new BSP option BSP_USE_SYNC_IN_CONTEXT_SWITCH can be used to enable
sync and isync instructions in the context switch.  This should be not
necessary in most cases.
2012-06-04 09:54:31 +02:00
Joel Sherrill
9b4422a251 Remove All CVS Id Strings Possible Using a Script
Script does what is expected and tries to do it as
smartly as possible.

+ remove occurrences of two blank comment lines
  next to each other after Id string line removed.
+ remove entire comment blocks which only exited to
  contain CVS Ids
+ If the processing left a blank line at the top of
  a file, it was removed.
2012-05-11 08:44:13 -05:00
Sebastian Huber
fdd9de8001 2011-07-21 Sebastian Huber <sebastian.huber@embedded-brains.de>
PR 1799/bsps
	* new-exceptions/bspsupport/ppc_exc_async_normal.S: New file.
	* new-exceptions/cpu.c, new-exceptions/cpu_asm.S,
	new-exceptions/bspsupport/ppc_exc_asm_macros.h,
	new-exceptions/bspsupport/ppc_exc_global_handler.c,
	new-exceptions/bspsupport/ppc_exc_prologue.c,
	new-exceptions/bspsupport/vectors.h: Added support for SPE.
	* configure.ac, preinstall.am, Makefile.am: Added support for qoriq
	BSPs.
2011-07-21 15:03:31 +00:00
Ralf Corsepius
f9acc339fe 2011-02-11 Ralf Corsépius <ralf.corsepius@rtems.org>
* e500/mmu/mmu.c, mpc505/ictrl/ictrl.c, mpc505/timer/timer.c,
	mpc5xx/ictrl/ictrl.c, mpc5xx/timer/timer.c,
	mpc6xx/altivec/vec_sup.c, mpc6xx/clock/c_clock.c,
	mpc6xx/mmu/bat.c, mpc6xx/mmu/bat.h, mpc6xx/mmu/pte121.c,
	mpc8260/timer/timer.c, mpc8xx/timer/timer.c, new-exceptions/cpu.c,
	new-exceptions/bspsupport/ppc_exc_initialize.c,
	ppc403/clock/clock.c, ppc403/console/console.c,
	ppc403/console/console.c.polled, ppc403/console/console405.c,
	ppc403/irq/ictrl.c, ppc403/tty_drv/tty_drv.c,
	rtems/powerpc/cache.h, shared/include/powerpc-utility.h, shared/src/cache.c:
	Use "__asm__" instead of "asm" for improved c99-compliance.
2011-02-11 09:46:53 +00:00
Till Straumann
c7f8408d31 2009-12-01 Till Straumann <strauman@slac.stanford.edu>
* new-exceptions/cpu.c, new-exceptions/cpu_asm.S,
	new-exceptions/bspsupport/ppc_exc_asm_macros.h,
	new-exceptions/bspsupport/ppc_exc_initialize.c,
	new-exceptions/bspsupport/vectors.h:
	Added AltiVec support (save/restore volatile vregs
	across exceptions).
2009-12-02 01:41:57 +00:00
Ralf Corsepius
359e537416 Whitespace removal. 2009-11-30 05:09:41 +00:00
Joel Sherrill
9b974cf425 2009-02-13 Joel Sherrill <joel.sherrill@OARcorp.com>
* new-exceptions/cpu.c: Correct prototype of _CPU_Initialize.
2009-02-13 14:20:58 +00:00
Ralf Corsepius
39d08d55e9 Convert to "bool". 2008-09-06 17:36:55 +00:00
Till Straumann
6ce3f7b7e2 2008-07-16 Till Straumann <strauman@slac.stanford.edu>
* new-exceptions/cpu.c: propagate R2 to all task contexts
	even if the ABI is SVR4. Cannot hurt...
2008-07-16 22:04:06 +00:00
Till Straumann
d60239f6c8 2008-07-16 Till Straumann <strauman@slac.stanford.edu>
* new-exceptions/cpu.c: use ppc_interrupt_get_disable_mask()
	to determine which bits to set/clear from _CPU_Context_Initialize().
2008-07-16 21:57:55 +00:00
Thomas Doerfler
25a92bc1ed adapted powerpc exception code 2008-07-11 10:02:12 +00:00
Joel Sherrill
4216c573e3 2007-12-04 Joel Sherrill <joel.sherrill@OARcorp.com>
* mpc5xx/console-generic/console-generic.c, mpc8260/timer/timer.c,
	new-exceptions/cpu.c, old-exceptions/cpu.c: Move interrupt_stack_size
	field from CPU Table to Configuration Table. Eliminate CPU Table from
	all ports. Delete references to CPU Table in all forms.
2007-12-04 22:19:37 +00:00
Till Straumann
bbc87852db Never allow the FPU to be switched on for integer-only tasks
(new gcc may use FP regs implicitely).
2006-06-19 19:57:01 +00:00
Ralf Corsepius
cc043dc3d2 2005-02-17 Ralf Corsepius <ralf.corsepius@rtems.org>
* new-exceptions/cpu.c, rtems/powerpc/powerpc.h:
	Remove CPU_MINIMUM_STACK_FRAME_SIZE.
	Use PPC_MINIMUM_STACK_FRAME_SIZE instead.
	* rtems/powerpc/powerpc.h: Add PPC_MINIMUM_STACK_FRAME_SIZE.
2005-02-17 04:23:18 +00:00
Ralf Corsepius
21a6869c26 2005-02-15 Ralf Corsepius <ralf.corsepius@rtems.org>
* new-exceptions/cpu.c: Add CPU_MINIMUM_STACK_FRAME_SIZE.
2005-02-16 09:07:47 +00:00
Ralf Corsepius
5bd1219753 2005-02-15 Ralf Corsepius <ralf.corsepius@rtems.org>
* new-exceptions/cpu.c (_CPU_ISR_install_vector): New.
2005-02-15 16:33:27 +00:00
Ralf Corsepius
3e5a93cc86 2005-02-14 Ralf Corsepius <ralf.corsepius@rtems.org>
* cpu.c, cpu_asm.S, irq_stub.S: #include <rtems/powerpc/powerpc.h>.
2005-02-14 04:44:17 +00:00
Ralf Corsepius
f05b2ac0bc Remove duplicate white lines. 2004-04-21 16:01:48 +00:00
Ralf Corsepius
6128a4aa5e Remove stray white spaces. 2004-04-21 10:43:04 +00:00
Ralf Corsepius
3239698d1f Remove stray white spaces. 2004-04-15 13:26:21 +00:00
Ralf Corsepius
9347024d81 2004-03-31 Ralf Corsepius <ralf_corsepius@rtems.org>
* cpu.c: Convert to using c99 fixed size types.
2004-03-31 03:45:46 +00:00
Joel Sherrill
9563a3a59d 2003-09-04 Joel Sherrill <joel@OARcorp.com>
* cpu.c, cpu_asm.S: URL for license changed.
2003-09-04 18:52:41 +00:00
Joel Sherrill
129b4a792b 2003-07-18 Till Straumann <strauman@slac.stanford.edu>
PR 288/rtems
	* support/new_exception_processing/cpu.c: _ISR_Nest_level is now
	properly maintained and does not reside in SPRG0.
2003-07-23 17:40:02 +00:00
Joel Sherrill
ab504d3415 2003-03-18 Till Straumann <strauman@slac.stanford.edu>
PR 356/bsps
	* cpu.c: This patch makes RTEMS/PowerPC eabi compliant.
2003-03-18 19:22:33 +00:00
Joel Sherrill
18a1f5a9f9 2002-11-01 Joel Sherrill <joel@OARcorp.com>
* cpu.c: Currently only the mpc8260 BSP supports interrupt nesting.
	NOTE: These needs to be generalized as the patch is applied to other
	BSPs.
2002-11-01 21:55:52 +00:00
Joel Sherrill
830e5f74ea 2001-05-14 Till Straumann <strauman@slac.stanford.edu>
* cpu.c: Per PR211 fix
	saving/restoring floating point context.  The fpsave and fprestore
	routines are only used in a executing context which _is_ fp and hence
	has the FPU enabled. The current behavior required the FPU always to
	be on which is very dangerous if lazy context switching is used.
	[Joel Note: Some ports explicitly enabled the FPU in the FP save and
	restore routines to avoid this.]

	The patch also makes sure (on powerpc only) that the FPU is disabled
	for integer tasks. Note that this is crucial if deferred fp context
	switching is used. Otherwise, fp context corruption may go undetected!
	Also note that even tasks which merely push/pop FP registers to/from
	the stack without modifying them still MUST be FP tasks - otherwise
	(if lazy FP context switching is used), FP register corruption (of
	other, FP, tasks may occur)!

	Furthermore, (on PPC) by default, lazy FP context save/restore
	is _disabled_.
2002-05-14 17:45:53 +00:00
Joel Sherrill
75ad73760f 2001-11-28 Joel Sherrill <joel@OARcorp.com>,
This was tracked as PR91.
	* rtems/score/cpu.h: Added CPU_PROVIDES_ISR_IS_IN_PROGRESS macro which
	is used to specify if the port uses the standard macro for this (FALSE).
	A TRUE setting indicates the port provides its own implementation.
	* rtems/score/c_isr.inl: Deleted and contents merged into cpu.c.
	* cpu.c: Received contents of c_isr.inl.
	* Makefile.am: Deleted reference to c_isr.inl.
2001-11-28 18:15:51 +00:00
Joel Sherrill
590aba4f1a 2001-10-12 Joel Sherrill <joel@OARcorp.com>
* mpc6xx/clock/c_clock.c, mpc6xx/clock/c_clock.h, mpc8xx/clock/clock.c,
	mpc8xx/timer/timer.c, new_exception_processing/cpu.c,
	new_exception_processing/cpu.h, new_exception_processing/cpu_asm.S,
	old_exception_processing/cpu.c, old_exception_processing/cpu.h,
	old_exception_processing/cpu_asm.S, old_exception_processing/rtems.S:
	Fixed typo.
2001-10-12 21:03:53 +00:00
Joel Sherrill
acc25eec35 Merged of mcp750 and mvme2307 BSP by Eric Valette <valette@crf.canon.fr>.
As part of this effort, the mpc750 libcpu code is now shared with the
ppc6xx.
1999-12-02 14:31:19 +00:00