diff options
author | Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> | 2018-03-21 15:58:53 +0300 |
---|---|---|
committer | Alexey Brodkin <abrodkin@synopsys.com> | 2018-03-21 17:06:54 +0300 |
commit | c877a8911d1262d3f78e1f24a24ef2f5e1333676 (patch) | |
tree | 6e536ca5919149416ab27b5daec8aa881abb3188 /arch/arc | |
parent | 88ae27eda3d47ab1c7885745f28fe3cf6f0b9a5b (diff) | |
download | u-boot-c877a8911d1262d3f78e1f24a24ef2f5e1333676.tar.gz u-boot-c877a8911d1262d3f78e1f24a24ef2f5e1333676.tar.bz2 u-boot-c877a8911d1262d3f78e1f24a24ef2f5e1333676.zip |
ARC: Cache: Allways check D$ status before entire/line ops
As we are planning to get rid of dozens of ifdef's in cache.c we
would better check D$ status before each entire/line operation
then check CONFIG_SYS_DCACHE_OFF config option.
This makes the code cleaner as well as D$ entire/line functions
remain functional even if we enable or disable D$ in run-time.
As we need to check status before *each* function execution and we
call D$ entire/line functions from different places we add
this check directly into D$ entire/line functions instead of
their callers to avoid code duplication.
Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Diffstat (limited to 'arch/arc')
-rw-r--r-- | arch/arc/lib/cache.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/arc/lib/cache.c b/arch/arc/lib/cache.c index e6e439aab8..efba789062 100644 --- a/arch/arc/lib/cache.c +++ b/arch/arc/lib/cache.c @@ -398,7 +398,6 @@ void dcache_disable(void) DC_CTRL_CACHE_DISABLE); } -#ifndef CONFIG_SYS_DCACHE_OFF /* Common Helper for Line Operations on D-cache */ static inline void __dcache_line_loop(unsigned long paddr, unsigned long sz, const int cacheop) @@ -448,6 +447,9 @@ static inline void __dc_entire_op(const int cacheop) { int aux; + if (!dcache_status()) + return; + __before_dc_op(cacheop); if (cacheop & OP_INV) /* Inv or flush-n-inv use same cmd reg */ @@ -463,14 +465,13 @@ static inline void __dc_entire_op(const int cacheop) static inline void __dc_line_op(unsigned long paddr, unsigned long sz, const int cacheop) { + if (!dcache_status()) + return; + __before_dc_op(cacheop); __dcache_line_loop(paddr, sz, cacheop); __after_dc_op(cacheop); } -#else -#define __dc_entire_op(cacheop) -#define __dc_line_op(paddr, sz, cacheop) -#endif /* !CONFIG_SYS_DCACHE_OFF */ void invalidate_dcache_range(unsigned long start, unsigned long end) { |