diff options
| author | Kumar Gala <galak@kernel.crashing.org> | 2011-11-22 06:51:15 -0600 | 
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2011-11-29 08:48:05 -0600 | 
| commit | 43f082bb7fc1c24b32a4abc693869c7d14d42829 (patch) | |
| tree | 93f965962cb64edbac52e2ff28125641a68a9299 | |
| parent | a63d9652757605ec5f7104addc5d38bf10ba8671 (diff) | |
| download | olio-uboot-2014.01-43f082bb7fc1c24b32a4abc693869c7d14d42829.tar.xz olio-uboot-2014.01-43f082bb7fc1c24b32a4abc693869c7d14d42829.zip | |
powerpc/85xx: Add workaround for erratum CPU-A003999
Erratum A-003999: Running Floating Point instructions requires special
initialization.
Impact:
Floating point arithmetic operations may result in an incorrect value.
Workaround:
Perform a read modify write to set bit 7 to a 1 in SPR 977 before
executing any floating point arithmetic operation. This bit can be set
when setting MSR[FP], and can be cleared when clearing MSR[FP].
Alternatively, the bit can be set once at boot time, and never cleared.
There will be no performance degradation due to setting this bit.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/cmd_errata.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/release.S | 6 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/start.S | 6 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/config_mpc85xx.h | 6 | 
4 files changed, 21 insertions, 0 deletions
| diff --git a/arch/powerpc/cpu/mpc85xx/cmd_errata.c b/arch/powerpc/cpu/mpc85xx/cmd_errata.c index 253bf08b6..523f29703 100644 --- a/arch/powerpc/cpu/mpc85xx/cmd_errata.c +++ b/arch/powerpc/cpu/mpc85xx/cmd_errata.c @@ -53,6 +53,9 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  #if defined(CONFIG_SYS_P4080_ERRATUM_CPU22)  	puts("Work-around for Erratum CPU22 enabled\n");  #endif +#if defined(CONFIG_SYS_FSL_ERRATUM_CPU_A003999) +	puts("Work-around for Erratum CPU-A003999 enabled\n"); +#endif  #if defined(CONFIG_SYS_FSL_ERRATUM_DDR_MSYNC_IN)  	puts("Work-around for DDR MSYNC_IN Erratum enabled\n");  #endif diff --git a/arch/powerpc/cpu/mpc85xx/release.S b/arch/powerpc/cpu/mpc85xx/release.S index 6678ed411..c81e19c0e 100644 --- a/arch/powerpc/cpu/mpc85xx/release.S +++ b/arch/powerpc/cpu/mpc85xx/release.S @@ -68,6 +68,12 @@ __secondary_start_page:  	mtspr	SPRN_HID1,r3  #endif +#ifdef CONFIG_SYS_FSL_ERRATUM_CPU_A003999 +	mfspr	r3,977 +	oris	r3,r3,0x0100 +	mtspr	977,r3 +#endif +  	/* Enable branch prediction */  	lis	r3,BUCSR_ENABLE@h  	ori	r3,r3,BUCSR_ENABLE@l diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S index 7bd5cc0b0..4d37d6e86 100644 --- a/arch/powerpc/cpu/mpc85xx/start.S +++ b/arch/powerpc/cpu/mpc85xx/start.S @@ -253,6 +253,12 @@ l2_disabled:  	mtspr	HID1,r0  #endif +#ifdef CONFIG_SYS_FSL_ERRATUM_CPU_A003999 +	mfspr	r3,977 +	oris	r3,r3,0x0100 +	mtspr	977,r3 +#endif +  	/* Enable Branch Prediction */  #if defined(CONFIG_BTB)  	lis	r0,BUCSR_ENABLE@h diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index 981d63979..f1da82eba 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -313,6 +313,7 @@  #define CONFIG_SYS_FSL_USB2_PHY_ENABLE  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999  #elif defined(CONFIG_PPC_P2041)  #define CONFIG_MAX_CPUS			4 @@ -331,6 +332,7 @@  #define CONFIG_SYS_FSL_USB2_PHY_ENABLE  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999  #elif defined(CONFIG_PPC_P3041)  #define CONFIG_MAX_CPUS			4 @@ -349,6 +351,7 @@  #define CONFIG_SYS_FSL_USB2_PHY_ENABLE  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999  #elif defined(CONFIG_PPC_P3060)  #define CONFIG_MAX_CPUS			8 @@ -364,6 +367,7 @@  #define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2"  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000  #define CONFIG_SYS_FSL_ERRATUM_DDR_A003 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999  #elif defined(CONFIG_PPC_P4040)  #define CONFIG_MAX_CPUS			4 @@ -374,6 +378,7 @@  #define CONFIG_SYS_FSL_TBCLK_DIV	16  #define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,p4080-pcie"  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999  #elif defined(CONFIG_PPC_P4080)  #define CONFIG_MAX_CPUS			8 @@ -402,6 +407,7 @@  #define CONFIG_SYS_P4080_ERRATUM_SERDES9  #define CONFIG_SYS_P4080_ERRATUM_SERDES_A001  #define CONFIG_SYS_P4080_ERRATUM_SERDES_A005 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999  /* P5010 is single core version of P5020 */  #elif defined(CONFIG_PPC_P5010) |