@ -200,7 +200,7 @@ void config_8560_ioports (volatile ccsr_cpm_t * cpm)
# ifdef CONFIG_SYS_FSL_CPC
# if defined(CONFIG_RAMBOOT_PBL) || defined(CONFIG_SYS_CPC_REINIT_F)
static void disable_cpc_sram ( void )
void disable_cpc_sram ( void )
{
int i ;
@ -251,7 +251,7 @@ static void enable_tdm_law(void)
}
# endif
static void enable_cpc ( void )
void enable_cpc ( void )
{
int i ;
u32 size = 0 ;
@ -306,6 +306,7 @@ static void invalidate_cpc(void)
# else
# define enable_cpc()
# define invalidate_cpc()
# define disable_cpc_sram()
# endif /* CONFIG_SYS_FSL_CPC */
/*
@ -546,88 +547,15 @@ int enable_cluster_l2(void)
/*
* Initialize L2 as cache .
*
* The newer 8548 , etc , parts have twice as much cache , but
* use the same bit - encoding as the older 8555 , etc , parts .
*
*/
int cpu_init_r ( void )
int l2cache_init ( void )
{
__maybe_unused u32 svr = get_svr ( ) ;
# ifdef CONFIG_SYS_LBC_LCRR
fsl_lbc_t * lbc = ( void __iomem * ) LBC_BASE_ADDR ;
# endif
# ifdef CONFIG_L2_CACHE
ccsr_l2cache_t * l2cache = ( void __iomem * ) CONFIG_SYS_MPC85xx_L2_ADDR ;
# elif defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2) && defined(CONFIG_E6500)
struct ccsr_cluster_l2 * l2cache = ( void __iomem * ) CONFIG_SYS_FSL_CLUSTER_1_L2 ;
# endif
# if defined(CONFIG_PPC_SPINTABLE_COMPATIBLE) && defined(CONFIG_MP)
extern int spin_table_compat ;
const char * spin ;
# endif
# ifdef CONFIG_SYS_FSL_ERRATUM_SEC_A003571
ccsr_sec_t __iomem * sec = ( void * ) CONFIG_SYS_FSL_SEC_ADDR ;
# endif
# if defined(CONFIG_SYS_P4080_ERRATUM_CPU22) || \
defined ( CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011 )
/*
* CPU22 and NMG_CPU_A011 share the same workaround .
* CPU22 applies to P4080 rev 1.0 , 2.0 , fixed in 3.0
* NMG_CPU_A011 applies to P4080 rev 1.0 , 2.0 , fixed in 3.0
* also applies to P3041 rev 1.0 , 1.1 , P2041 rev 1.0 , 1.1 , both
* fixed in 2.0 . NMG_CPU_A011 is activated by default and can
* be disabled by hwconfig with syntax :
*
* fsl_cpu_a011 : disable
*/
extern int enable_cpu_a011_workaround ;
# ifdef CONFIG_SYS_P4080_ERRATUM_CPU22
enable_cpu_a011_workaround = ( SVR_MAJ ( svr ) < 3 ) ;
# else
char buffer [ HWCONFIG_BUFFER_SIZE ] ;
char * buf = NULL ;
int n , res ;
n = getenv_f ( " hwconfig " , buffer , sizeof ( buffer ) ) ;
if ( n > 0 )
buf = buffer ;
res = hwconfig_arg_cmp_f ( " fsl_cpu_a011 " , " disable " , buf ) ;
if ( res > 0 )
enable_cpu_a011_workaround = 0 ;
else {
if ( n > = HWCONFIG_BUFFER_SIZE ) {
printf ( " fsl_cpu_a011 was not found. hwconfig variable "
" may be too long \n " ) ;
}
enable_cpu_a011_workaround =
( SVR_SOC_VER ( svr ) = = SVR_P4080 & & SVR_MAJ ( svr ) < 3 ) | |
( SVR_SOC_VER ( svr ) ! = SVR_P4080 & & SVR_MAJ ( svr ) < 2 ) ;
}
# endif
if ( enable_cpu_a011_workaround ) {
flush_dcache ( ) ;
mtspr ( L1CSR2 , ( mfspr ( L1CSR2 ) | L1CSR2_DCWS ) ) ;
sync ( ) ;
}
# endif
# ifdef CONFIG_SYS_FSL_ERRATUM_A005812
/*
* A - 005 812 workaround sets bit 32 of SPR 976 for SoCs running
* in write shadow mode . Checking DCWS before setting SPR 976.
*/
if ( mfspr ( L1CSR2 ) & L1CSR2_DCWS )
mtspr ( SPRN_HDBCR0 , ( mfspr ( SPRN_HDBCR0 ) | 0x80000000 ) ) ;
# endif
# if defined(CONFIG_PPC_SPINTABLE_COMPATIBLE) && defined(CONFIG_MP)
spin = getenv ( " spin_table_compat " ) ;
if ( spin & & ( * spin = = ' n ' ) )
spin_table_compat = 0 ;
else
spin_table_compat = 1 ;
# endif
puts ( " L2: " ) ;
@ -752,6 +680,89 @@ skip_l2:
puts ( " disabled \n " ) ;
# endif
return 0 ;
}
/*
*
* The newer 8548 , etc , parts have twice as much cache , but
* use the same bit - encoding as the older 8555 , etc , parts .
*
*/
int cpu_init_r ( void )
{
__maybe_unused u32 svr = get_svr ( ) ;
# ifdef CONFIG_SYS_LBC_LCRR
fsl_lbc_t * lbc = ( void __iomem * ) LBC_BASE_ADDR ;
# endif
# if defined(CONFIG_PPC_SPINTABLE_COMPATIBLE) && defined(CONFIG_MP)
extern int spin_table_compat ;
const char * spin ;
# endif
# ifdef CONFIG_SYS_FSL_ERRATUM_SEC_A003571
ccsr_sec_t __iomem * sec = ( void * ) CONFIG_SYS_FSL_SEC_ADDR ;
# endif
# if defined(CONFIG_SYS_P4080_ERRATUM_CPU22) || \
defined ( CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011 )
/*
* CPU22 and NMG_CPU_A011 share the same workaround .
* CPU22 applies to P4080 rev 1.0 , 2.0 , fixed in 3.0
* NMG_CPU_A011 applies to P4080 rev 1.0 , 2.0 , fixed in 3.0
* also applies to P3041 rev 1.0 , 1.1 , P2041 rev 1.0 , 1.1 , both
* fixed in 2.0 . NMG_CPU_A011 is activated by default and can
* be disabled by hwconfig with syntax :
*
* fsl_cpu_a011 : disable
*/
extern int enable_cpu_a011_workaround ;
# ifdef CONFIG_SYS_P4080_ERRATUM_CPU22
enable_cpu_a011_workaround = ( SVR_MAJ ( svr ) < 3 ) ;
# else
char buffer [ HWCONFIG_BUFFER_SIZE ] ;
char * buf = NULL ;
int n , res ;
n = getenv_f ( " hwconfig " , buffer , sizeof ( buffer ) ) ;
if ( n > 0 )
buf = buffer ;
res = hwconfig_arg_cmp_f ( " fsl_cpu_a011 " , " disable " , buf ) ;
if ( res > 0 ) {
enable_cpu_a011_workaround = 0 ;
} else {
if ( n > = HWCONFIG_BUFFER_SIZE ) {
printf ( " fsl_cpu_a011 was not found. hwconfig variable "
" may be too long \n " ) ;
}
enable_cpu_a011_workaround =
( SVR_SOC_VER ( svr ) = = SVR_P4080 & & SVR_MAJ ( svr ) < 3 ) | |
( SVR_SOC_VER ( svr ) ! = SVR_P4080 & & SVR_MAJ ( svr ) < 2 ) ;
}
# endif
if ( enable_cpu_a011_workaround ) {
flush_dcache ( ) ;
mtspr ( L1CSR2 , ( mfspr ( L1CSR2 ) | L1CSR2_DCWS ) ) ;
sync ( ) ;
}
# endif
# ifdef CONFIG_SYS_FSL_ERRATUM_A005812
/*
* A - 005 812 workaround sets bit 32 of SPR 976 for SoCs running
* in write shadow mode . Checking DCWS before setting SPR 976.
*/
if ( mfspr ( L1CSR2 ) & L1CSR2_DCWS )
mtspr ( SPRN_HDBCR0 , ( mfspr ( SPRN_HDBCR0 ) | 0x80000000 ) ) ;
# endif
# if defined(CONFIG_PPC_SPINTABLE_COMPATIBLE) && defined(CONFIG_MP)
spin = getenv ( " spin_table_compat " ) ;
if ( spin & & ( * spin = = ' n ' ) )
spin_table_compat = 0 ;
else
spin_table_compat = 1 ;
# endif
l2cache_init ( ) ;
# if defined(CONFIG_RAMBOOT_PBL)
disable_cpc_sram ( ) ;
# endif