[U-Boot] [PATCH] arm: socfpga: Actually enable L2 cache

Chin Liang See clsee at altera.com
Mon Dec 21 10:50:50 CET 2015


On Sun, 2015-12-20 at 03:57 +0100, Marek Vasut wrote:
> On Sunday, December 20, 2015 at 03:38:54 AM, Stefan Roese wrote:
> > On 19.12.2015 17:31, Marek Vasut wrote:
> > > On Saturday, December 19, 2015 at 11:03:45 AM, Stefan Roese
> > > wrote:
> > > > On 19.12.2015 06:58, Marek Vasut wrote:
> > > > > The L2 cache was never enabled in the
> > > > > v7_outer_cache_enable(), fix
> > > > > this and enable the L2 cache.
> > > > > 
> > > > > Signed-off-by: Marek Vasut <marex at denx.de>
> > > > > Cc: Dinh Nguyen <dinguyen at opensource.altera.com>
> > > > > Cc: Chin Liang See <clsee at altera.com>
> > > > > ---
> > > > > 
> > > > >    arch/arm/mach-socfpga/misc.c | 7 +++++--
> > > > >    1 file changed, 5 insertions(+), 2 deletions(-)
> > > > > 
> > > > > diff --git a/arch/arm/mach-socfpga/misc.c
> > > > > b/arch/arm/mach-socfpga/misc.c index b110f5b..621f5d9 100644
> > > > > --- a/arch/arm/mach-socfpga/misc.c
> > > > > +++ b/arch/arm/mach-socfpga/misc.c
> > > > > @@ -54,14 +54,17 @@ void enable_caches(void)
> > > > > 
> > > > >    void v7_outer_cache_enable(void)
> > > > >    {
> > > > > 
> > > > > -	/* disable the L2 cache */
> > > > > -	writel(0, &pl310->pl310_ctrl);
> > > > > +	/* Disable the L2 cache */
> > > > > +	clrbits_le32(&pl310->pl310_ctrl, L2X0_CTRL_EN);
> > > > > 
> > > > >    	/* enable BRESP, instruction and data prefetch,
> > > > > full line of 
> zeroes
> > > > >    	*/ setbits_le32(&pl310->pl310_aux_ctrl,
> > > > >    	
> > > > >    		     L310_AUX_CTRL_DATA_PREFETCH_MASK |
> > > > >    		     L310_AUX_CTRL_INST_PREFETCH_MASK |
> > > > >    		     L310_SHARED_ATT_OVERRIDE_ENABLE);
> > > > > 
> > > > > +
> > > > > +	/* Enable the L2 cache */
> > > > > +	setbits_le32(&pl310->pl310_ctrl, L2X0_CTRL_EN);
> > > > 
> > > > Thanks Marek. I would be interested in some number here. Do you
> > > > see
> > > > a bigger change in the performance (ethernet driver or
> > > > dhrystone)
> > > > by enabling the L2 cache?
> > > 
> > > Neither, but I didn't see any improvement on MX6 when I enabled
> > > L2
> > > either.
> > 
> > Then my feeling is, that some other configuration is needed to
> > effectively enable the L2 cache on those platforms. Sorry, but
> > I have no clear suggestions right now. Other than to look at
> > Linux for the L2 cache enabling.
> 
> The L2 cache is enabled, but the slowdown is not induced by the L2
> cache.
> The L2 cache has no performance impact on other platforms either. Did
> you
> observe actual performance improvement with L2 cache ON anywhere ?
> 

Hmmm, here is the function for L2 cache within my development branch.
Some of the latency tuning helps based on the benchmark result.
Probably you can give it a try, Marek?

void v7_outer_cache_enable(void)
{
	/* disable the L2 cache */
	writel(0, &pl310_regs_base->pl310_ctrl);
 
	/* enable BRESP, instruction and data prefetch, full line of
zeroes */
	setbits_le32(&pl310_regs_base->pl310_aux_ctrl,
			PL310_AUX_CTRL_FULL_LINE_ZERO_MASK |
			PL310_AUX_CTRL_DATA_PREFETCH_MASK |
			PL310_AUX_CTRL_INST_PREFETCH_MASK |
			PL310_AUX_CTRL_EARLY_BRESP_MASK);
 
	/* setup tag ram latency */
	writel(0, &pl310_regs_base->pl310_tag_latency_ctrl);
 
	/* setup data ram latency */
	writel(0x10, &pl310_regs_base->pl310_data_latency_ctrl);
 
	/* invalidate the cache before enable */
	v7_outer_cache_inval_all();
 
	/* enable the L2 cache */
	writel(0x1, &pl310_regs_base->pl310_ctrl);
}

Thanks
Chin Liang

> Best regards,
> Marek Vasut


More information about the U-Boot mailing list