arm64: Convert __inval_cache_range() to area-based
__inval_cache_range() is already the odd one out among our data cache maintenance routines as the only remaining range-based one; as we're going to want an invalidation routine to call from C code for the pmem API, let's tweak the prototype and name to bring it in line with the clean operations, and to make its relationship with __dma_inv_area() neatly mirror that of __clean_dcache_area_poc() and __dma_clean_area(). The loop clearing the early page tables gets mildly massaged in the process for the sake of consistency. Reviewed-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Esse commit está contido em:
@@ -108,6 +108,19 @@ ENTRY(__clean_dcache_area_pou)
|
||||
ret
|
||||
ENDPROC(__clean_dcache_area_pou)
|
||||
|
||||
/*
|
||||
* __inval_dcache_area(kaddr, size)
|
||||
*
|
||||
* Ensure that any D-cache lines for the interval [kaddr, kaddr+size)
|
||||
* are invalidated. Any partial lines at the ends of the interval are
|
||||
* also cleaned to PoC to prevent data loss.
|
||||
*
|
||||
* - kaddr - kernel address
|
||||
* - size - size in question
|
||||
*/
|
||||
ENTRY(__inval_dcache_area)
|
||||
/* FALLTHROUGH */
|
||||
|
||||
/*
|
||||
* __dma_inv_area(start, size)
|
||||
* - start - virtual start address of region
|
||||
@@ -115,14 +128,6 @@ ENDPROC(__clean_dcache_area_pou)
|
||||
*/
|
||||
__dma_inv_area:
|
||||
add x1, x1, x0
|
||||
/* FALLTHROUGH */
|
||||
|
||||
/*
|
||||
* __inval_cache_range(start, end)
|
||||
* - start - start address of region
|
||||
* - end - end address of region
|
||||
*/
|
||||
ENTRY(__inval_cache_range)
|
||||
dcache_line_size x2, x3
|
||||
sub x3, x2, #1
|
||||
tst x1, x3 // end cache line aligned?
|
||||
@@ -140,7 +145,7 @@ ENTRY(__inval_cache_range)
|
||||
b.lo 2b
|
||||
dsb sy
|
||||
ret
|
||||
ENDPIPROC(__inval_cache_range)
|
||||
ENDPIPROC(__inval_dcache_area)
|
||||
ENDPROC(__dma_inv_area)
|
||||
|
||||
/*
|
||||
|
Referência em uma nova issue
Block a user