| /* | |
| * This file is subject to the terms and conditions of the GNU General Public | |
| * License. See the file "COPYING" in the main directory of this archive | |
| * for more details. | |
| * | |
| * Copyright (C) 2002, 2004, 2007 by Ralf Baechle | |
| * Copyright (C) 2007 Maciej W. Rozycki | |
| */ | |
| #ifndef _ASM_WAR_H | |
| #define _ASM_WAR_H | |
| /* | |
| * Work around certain R4000 CPU errata (as implemented by GCC): | |
| * | |
| * - A double-word or a variable shift may give an incorrect result | |
| * if executed immediately after starting an integer division: | |
| * "MIPS R4000PC/SC Errata, Processor Revision 2.2 and 3.0", | |
| * erratum #28 | |
| * "MIPS R4000MC Errata, Processor Revision 2.2 and 3.0", erratum | |
| * #19 | |
| * | |
| * - A double-word or a variable shift may give an incorrect result | |
| * if executed while an integer multiplication is in progress: | |
| * "MIPS R4000PC/SC Errata, Processor Revision 2.2 and 3.0", | |
| * errata #16 & #28 | |
| * | |
| * - An integer division may give an incorrect result if started in | |
| * a delay slot of a taken branch or a jump: | |
| * "MIPS R4000PC/SC Errata, Processor Revision 2.2 and 3.0", | |
| * erratum #52 | |
| */ | |
| #ifdef CONFIG_CPU_R4000_WORKAROUNDS | |
| #define R4000_WAR 1 | |
| #else | |
| #define R4000_WAR 0 | |
| #endif | |
| /* | |
| * Work around certain R4400 CPU errata (as implemented by GCC): | |
| * | |
| * - A double-word or a variable shift may give an incorrect result | |
| * if executed immediately after starting an integer division: | |
| * "MIPS R4400MC Errata, Processor Revision 1.0", erratum #10 | |
| * "MIPS R4400MC Errata, Processor Revision 2.0 & 3.0", erratum #4 | |
| */ | |
| #ifdef CONFIG_CPU_R4400_WORKAROUNDS | |
| #define R4400_WAR 1 | |
| #else | |
| #define R4400_WAR 0 | |
| #endif | |
| /* | |
| * Work around the "daddi" and "daddiu" CPU errata: | |
| * | |
| * - The `daddi' instruction fails to trap on overflow. | |
| * "MIPS R4000PC/SC Errata, Processor Revision 2.2 and 3.0", | |
| * erratum #23 | |
| * | |
| * - The `daddiu' instruction can produce an incorrect result. | |
| * "MIPS R4000PC/SC Errata, Processor Revision 2.2 and 3.0", | |
| * erratum #41 | |
| * "MIPS R4000MC Errata, Processor Revision 2.2 and 3.0", erratum | |
| * #15 | |
| * "MIPS R4400PC/SC Errata, Processor Revision 1.0", erratum #7 | |
| * "MIPS R4400MC Errata, Processor Revision 1.0", erratum #5 | |
| */ | |
| #ifdef CONFIG_CPU_DADDI_WORKAROUNDS | |
| #define DADDI_WAR 1 | |
| #else | |
| #define DADDI_WAR 0 | |
| #endif | |
| #endif /* _ASM_WAR_H */ |