• Vineet Gupta's avatar
    ARC: [mm] optimise icache flush for user mappings · 24603fdd
    Vineet Gupta authored
    ARC icache doesn't snoop dcache thus executable pages need to be made
    coherent before mapping into userspace in flush_icache_page().
    
    However ARC700 CDU (hardware cache flush module) requires both vaddr
    (index in cache) as well as paddr (tag match) to correctly identify a
    line in the VIPT cache. A typical ARC700 SoC has aliasing icache, thus
    the paddr only based flush_icache_page() API couldn't be implemented
    efficiently. It had to loop thru all possible alias indexes and perform
    the invalidate operation (ofcourse the cache op would only succeed at
    the index(es) where tag matches - typically only 1, but the cost of
    visiting all the cache-bins needs to paid nevertheless).
    
    Turns out however that the vaddr (along with paddr) is available in
    update_mmu_cache() hence better suits ARC icache flush semantics.
    With both vaddr+paddr, exactly one flush operation per line is done.
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    24603fdd
cacheflush.h 2.56 KB