Maciej W. Rozycki 20d60d9973 [MIPS] R4000/R4400 errata workarounds
This is the gereric part of R4000/R4400 errata workarounds.  They include 
compiler and assembler support as well as some source code modifications 
to address the problems with some combinations of multiply/divide+shift 
instructions as well as the daddi and daddiu instructions.

 Changes included are as follows:

1. New Kconfig options to select workarounds by platforms as necessary.

2. Arch top-level Makefile to pass necessary options to the compiler; also 
   incompatible configurations are detected (-mno-sym32 unsupported as 
   horribly intrusive for little gain).

3. Bug detection updated and shuffled -- the multiply/divide+shift problem 
   is lethal enough that if not worked around it makes the kernel crash in 
   time_init() because of a division by zero; the daddiu erratum might 
   also trigger early potentially, though I have not observed it.  On the 
   other hand the daddi detection code requires the exception subsystem to 
   have been initialised (and is there mainly for information).

4. r4k_daddiu_bug() added so that the existence of the erratum can be 
   queried by code at the run time as necessary; useful for generated code 
   like TLB fault and copy/clear page handlers.

5. __udelay() updated as it uses multiplication in inline assembly.

 Note that -mdaddi requires modified toolchain (which has been maintained 
by myself and available from my site for ~4years now -- versions covered 
are GCC 2.95.4 - 4.1.2 and binutils from 2.13 onwards).  The -mfix-r4000 
and -mfix-r4400 have been standard for a while though.

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2008-01-29 10:14:54 +00:00
..
2007-07-13 17:40:01 +01:00
2007-12-01 00:39:37 +00:00
2008-01-07 15:32:04 +00:00
2005-04-16 15:20:36 -07:00
2007-10-19 11:53:37 -07:00
2007-10-11 23:46:04 +01:00
2007-10-17 08:42:55 -07:00
2007-07-12 17:41:23 +01:00
2007-11-15 23:21:49 +00:00
2006-12-10 21:52:11 +00:00
2007-09-14 19:08:42 +01:00
2008-01-29 10:14:54 +00:00
2007-10-13 00:53:01 +01:00
2007-05-08 11:14:58 -07:00
2007-10-19 11:53:37 -07:00
2007-11-26 17:26:15 +00:00