diff mbox series

[U-Boot,v2,10/20] ARC: cache: move slc status check into slc_entire_op and slc_rgn_op

Message ID 20180321125905.14897-11-Eugeniy.Paltsev@synopsys.com
State Accepted, archived
Commit ea9f6f1e873cc1b6fe220e1017357532045ce988
Delegated to: Alexey Brodkin
Headers show
Series ARC: cache subsystem improvement/refactoring | expand

Commit Message

Eugeniy Paltsev March 21, 2018, 12:58 p.m. UTC
As of today we check slc status before each call of __slc_rgn_op
or __slc_entire_op. So move status check into __slc_rgn_op
and __slc_entire_op.

As we need to check status before *each* function call and we
slc_entire_op and slc_rgn_op functions from different places we add
this check directly into slc entire/line functions instead of
their callers to avoid code duplication.

Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
---
 arch/arc/lib/cache.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
diff mbox series

Patch

diff --git a/arch/arc/lib/cache.c b/arch/arc/lib/cache.c
index 354dbc600e..f147674ae8 100644
--- a/arch/arc/lib/cache.c
+++ b/arch/arc/lib/cache.c
@@ -141,6 +141,9 @@  static void __slc_entire_op(const int op)
 {
 	unsigned int ctrl;
 
+	if (!slc_exists)
+		return;
+
 	ctrl = read_aux_reg(ARC_AUX_SLC_CTRL);
 
 	if (!(op & OP_FLUSH))		/* i.e. OP_INV */
@@ -179,6 +182,9 @@  static void __slc_rgn_op(unsigned long paddr, unsigned long sz, const int op)
 	unsigned int ctrl;
 	unsigned long end;
 
+	if (!slc_exists)
+		return;
+
 	/*
 	 * The Region Flush operation is specified by CTRL.RGN_OP[11..9]
 	 *  - b'000 (default) is Flush,
@@ -366,7 +372,7 @@  void invalidate_icache_all(void)
 {
 	__ic_entire_invalidate();
 
-	if (is_isa_arcv2() && slc_exists)
+	if (is_isa_arcv2())
 		__slc_entire_op(OP_INV);
 }
 
@@ -487,7 +493,7 @@  void invalidate_dcache_range(unsigned long start, unsigned long end)
 	if (!is_isa_arcv2() || !ioc_exists)
 		__dc_line_op(start, end - start, OP_INV);
 
-	if (is_isa_arcv2() && slc_exists && !ioc_exists)
+	if (is_isa_arcv2() && !ioc_exists)
 		__slc_rgn_op(start, end - start, OP_INV);
 }
 
@@ -504,7 +510,7 @@  void flush_dcache_range(unsigned long start, unsigned long end)
 	if (!is_isa_arcv2() || !ioc_exists)
 		__dc_line_op(start, end - start, OP_FLUSH);
 
-	if (is_isa_arcv2() && slc_exists && !ioc_exists)
+	if (is_isa_arcv2() && !ioc_exists)
 		__slc_rgn_op(start, end - start, OP_FLUSH);
 }
 
@@ -523,7 +529,7 @@  void flush_n_invalidate_dcache_all(void)
 {
 	__dc_entire_op(OP_FLUSH_N_INV);
 
-	if (is_isa_arcv2() && slc_exists)
+	if (is_isa_arcv2())
 		__slc_entire_op(OP_FLUSH_N_INV);
 }
 
@@ -531,6 +537,6 @@  void flush_dcache_all(void)
 {
 	__dc_entire_op(OP_FLUSH);
 
-	if (is_isa_arcv2() && slc_exists)
+	if (is_isa_arcv2())
 		__slc_entire_op(OP_FLUSH);
 }