@ -12,6 +12,8 @@
# include <asm/io.h>
# include <asm/global_data.h>
# include <asm/arch-fsl-layerscape/config.h>
# include <fsl_ddr_sdram.h>
# include <fsl_ddr.h>
# ifdef CONFIG_CHAIN_OF_TRUST
# include <fsl_validate.h>
# endif
@ -271,6 +273,39 @@ static void erratum_a009660(void)
# endif
}
static void erratum_a008850_early ( void )
{
# ifdef CONFIG_SYS_FSL_ERRATUM_A008850
/* part 1 of 2 */
struct ccsr_cci400 __iomem * cci = ( void * ) CONFIG_SYS_CCI400_ADDR ;
struct ccsr_ddr __iomem * ddr = ( void * ) CONFIG_SYS_FSL_DDR_ADDR ;
/* disables propagation of barrier transactions to DDRC from CCI400 */
out_le32 ( & cci - > ctrl_ord , CCI400_CTRLORD_TERM_BARRIER ) ;
/* disable the re-ordering in DDRC */
ddr_out32 ( & ddr - > eor , DDR_EOR_RD_REOD_DIS | DDR_EOR_WD_REOD_DIS ) ;
# endif
}
void erratum_a008850_post ( void )
{
# ifdef CONFIG_SYS_FSL_ERRATUM_A008850
/* part 2 of 2 */
struct ccsr_cci400 __iomem * cci = ( void * ) CONFIG_SYS_CCI400_ADDR ;
struct ccsr_ddr __iomem * ddr = ( void * ) CONFIG_SYS_FSL_DDR_ADDR ;
u32 tmp ;
/* enable propagation of barrier transactions to DDRC from CCI400 */
out_le32 ( & cci - > ctrl_ord , CCI400_CTRLORD_EN_BARRIER ) ;
/* enable the re-ordering in DDRC */
tmp = ddr_in32 ( & ddr - > eor ) ;
tmp & = ~ ( DDR_EOR_RD_REOD_DIS | DDR_EOR_WD_REOD_DIS ) ;
ddr_out32 ( & ddr - > eor , tmp ) ;
# endif
}
void fsl_lsch2_early_init_f ( void )
{
struct ccsr_cci400 * cci = ( struct ccsr_cci400 * ) CONFIG_SYS_CCI400_ADDR ;
@ -295,6 +330,7 @@ void fsl_lsch2_early_init_f(void)
CCI400_DVM_MESSAGE_REQ_EN | CCI400_SNOOP_REQ_EN ) ;
/* Erratum */
erratum_a008850_early ( ) ; /* part 1 of 2 */
erratum_a009929 ( ) ;
erratum_a009660 ( ) ;
}