diff options
-rw-r--r-- | arch/arm/mm/cache-l2x0.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index 05d577613b13..55ca637a4930 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c | |||
@@ -506,15 +506,21 @@ static void aurora_clean_range(unsigned long start, unsigned long end) | |||
506 | 506 | ||
507 | static void aurora_flush_range(unsigned long start, unsigned long end) | 507 | static void aurora_flush_range(unsigned long start, unsigned long end) |
508 | { | 508 | { |
509 | if (!l2_wt_override) { | 509 | start &= ~(CACHE_LINE_SIZE - 1); |
510 | start &= ~(CACHE_LINE_SIZE - 1); | 510 | end = ALIGN(end, CACHE_LINE_SIZE); |
511 | end = ALIGN(end, CACHE_LINE_SIZE); | 511 | while (start != end) { |
512 | while (start != end) { | 512 | unsigned long range_end = calc_range_end(start, end); |
513 | unsigned long range_end = calc_range_end(start, end); | 513 | /* |
514 | * If L2 is forced to WT, the L2 will always be clean and we | ||
515 | * just need to invalidate. | ||
516 | */ | ||
517 | if (l2_wt_override) | ||
514 | aurora_pa_range(start, range_end - CACHE_LINE_SIZE, | 518 | aurora_pa_range(start, range_end - CACHE_LINE_SIZE, |
515 | AURORA_FLUSH_RANGE_REG); | 519 | AURORA_INVAL_RANGE_REG); |
516 | start = range_end; | 520 | else |
517 | } | 521 | aurora_pa_range(start, range_end - CACHE_LINE_SIZE, |
522 | AURORA_FLUSH_RANGE_REG); | ||
523 | start = range_end; | ||
518 | } | 524 | } |
519 | } | 525 | } |
520 | 526 | ||