[PATCH V5] Add support for Aurora L2 Cache Controller

Jason Cooper jason at lakedaemon.net
Sun Sep 30 19:55:39 EDT 2012


Gregory,

Unfortunately, this series is slipping to v3.8.  Please put patches 1,2
and 3 into Russell's patch tracker.  Once I see that he takes them in,
I'll resubmit my pullrq for the last three.

Sorry for all the confusion.

thx,

Jason.

On Wed, Sep 26, 2012 at 06:02:44PM +0200, Gregory CLEMENT wrote:
> Hello,
> 
> This a the 5th version of the patch set (the sixth if we include the
> RFC). This last series add the ultimate change asked by Russell after
> his review. See the end of this email for the changelog.
> 
> The purpose of this patch set is to add support for Aurora L2 Cache
> Controller used by Armada 370 and Armada XP SoCs. As it was initially
> designed by Marvell engineer to be compatible with the ARM L2 Cache
> Controller, we chose to reuse the existing code and to just extend it
> to support the differences and improvements brought by the Aurora
> controller.The diffstat looks like:
> 
>  Documentation/devicetree/bindings/arm/l2cc.txt |    9 +
>  arch/arm/boot/dts/armada-370.dtsi              |    6 +
>  arch/arm/boot/dts/armada-xp.dtsi               |    7 +
>  arch/arm/include/asm/hardware/cache-l2x0.h     |    5 +
>  arch/arm/mach-mvebu/Kconfig                    |    1 +
>  arch/arm/mach-mvebu/irq-armada-370-xp.c        |    4 +
>  arch/arm/mm/cache-aurora-l2.h                  |   55 +++++
>  arch/arm/mm/cache-l2x0.c                       |  277 +++++++++++++++++++++---
>  8 files changed, 336 insertions(+), 28 deletions(-)
> 
> The main differences and improvements are:
> 
> - no cache id part number available through hardware (need to get it
>   by the DT).
> - always write through mode available.
> - two flavors of the controller 'outer cache' and 'system cache' (the
>   last one meaning maintenance operations on L1 are broadcasted to the
>   L2 and L2 performs the same operation).
> - in outer cache mode, the cache maintenance operations are improved
>   and can be done on a range inside a page and are not limited to a
>   cache line.
> - during resume the controller need to restore the ctrl register.
> 
> The first patch adds some modifications in the driver
> infrastructure. As most of the outer cache functions can use the
> Aurora improvements, we had to introduce new functions. So we thought
> it was better to use a outer_cache_fns field inside l2x0_of_data and
> just memcopy it into outer_cache depending of the type of the l2x0
> cache.
> 
> Changelog:
> V4 -> V5:
> - Rebased L2 pach set onto v3.6-rc7.
> - The header file cache-aurora-l2.h was co-located with its only user:
>   moved from arch/arm/include/asm/hardware/ to arch/arm/mm/.
> - Removed additional unnecessary blank lines in cache-l2x0.c.
> 
> V3 -> V4:
> - Rebased L2 pach set onto v3.6-rc6.
> - The assignment of outer_cache in l2x0_init, don't depend of
>   CONFIG_OF but of variable. The value of this boolean variable is
>   changed in l2x0_of_init. Then, if a system enable CONFIG_OF don't
>   supply a DT file, relying on the old way to initialize the L2 cache,
>   the assignment won't be disable.
> - Removed unnecessary check in calc_range_end(). The alignment tested
>   was already made before calling this function.
> 
> V2 -> V3:
> - Use define instead of literal value for AURORA_CTRL_FW,
>   AURORA_WAY_SIZE_SHIFT, L2X0_WAY_SIZE_SHIFT and L2X0_CTRL_EN.
> - Used ALIGN, IS_ALUGNED and PAGE_ALIGN macro instead of bitwise
>   operation.
> - Calculate the number of way for Aurora instead of using a switch
>   case.
> - removed inaccurate BUG() call and replaced them by a pr_warn if
>   needed.
> - In aurora_inv_range round the start and end addresses to cache line
>   size. The initial code was supposed to invalidate partial line cache
>   but actually invalidate the full line, so there was no point to do
>   it outside the aurora_pa_range call.
> - Removed the dsb call in the aurora_*_range function: the
>   cache_sync() call inside aurora_pa_range() is enough.
> - And as usual tested on Armada 370 and Armada XP boards and ran
>   benchmark without seeing any regression. Results are updated on the
>   wiki page.
> 
> V1 -> V2:
> - Rebased L2 pach set onto v3.6-rc4.
> - Changed the compatible names to be more explicit, from
>   aurora-cache-with-outer to aurora-outer-cache , and from
>   aurora-cache-without-outer to aurora-system-cache.
> - Add an isb() after the call to mcr in aurora_broadcast_l2_commands().
> - Added the tested and reviewed-by from Lior Amsalem and Yehuda
>   Yitschak.
> - Tested on Armada 370 and Armada XP boards and ran benchmark without
>   seeing any regression.
> 
> RFC -> V1:
> - Rebased the series on to V3.6-rc3
> - Added missing Signed-off-by
> - Corrected a compilation warning that I have missed
> - Ran benchmarks without seeing any regression
> 
> Benchmarks results are visible here:
> https://github.com/MISL-EBU-System-SW/mainline-public/wiki/Non-official-cache-bench-results-on-the-mainline-Linux-port-%28-kernels-3.6-rcX%29-of-Armada-XP-and-Armada-370
> 
> The git branch aurora-L2-cache-ctrl is visible at
> https://github.com/MISL-EBU-System-SW/mainline-public.git
> 
> Regards,
> 
> Gregory
> 
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel



More information about the linux-arm-kernel mailing list