mirror of
https://xff.cz/git/u-boot/
synced 2025-09-30 06:51:28 +02:00
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>
This commit is contained in:
committed by
Alexey Brodkin
parent
88ae27eda3
commit
c877a8911d
@@ -398,7 +398,6 @@ void dcache_disable(void)
|
|||||||
DC_CTRL_CACHE_DISABLE);
|
DC_CTRL_CACHE_DISABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_SYS_DCACHE_OFF
|
|
||||||
/* Common Helper for Line Operations on D-cache */
|
/* Common Helper for Line Operations on D-cache */
|
||||||
static inline void __dcache_line_loop(unsigned long paddr, unsigned long sz,
|
static inline void __dcache_line_loop(unsigned long paddr, unsigned long sz,
|
||||||
const int cacheop)
|
const int cacheop)
|
||||||
@@ -448,6 +447,9 @@ static inline void __dc_entire_op(const int cacheop)
|
|||||||
{
|
{
|
||||||
int aux;
|
int aux;
|
||||||
|
|
||||||
|
if (!dcache_status())
|
||||||
|
return;
|
||||||
|
|
||||||
__before_dc_op(cacheop);
|
__before_dc_op(cacheop);
|
||||||
|
|
||||||
if (cacheop & OP_INV) /* Inv or flush-n-inv use same cmd reg */
|
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,
|
static inline void __dc_line_op(unsigned long paddr, unsigned long sz,
|
||||||
const int cacheop)
|
const int cacheop)
|
||||||
{
|
{
|
||||||
|
if (!dcache_status())
|
||||||
|
return;
|
||||||
|
|
||||||
__before_dc_op(cacheop);
|
__before_dc_op(cacheop);
|
||||||
__dcache_line_loop(paddr, sz, cacheop);
|
__dcache_line_loop(paddr, sz, cacheop);
|
||||||
__after_dc_op(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)
|
void invalidate_dcache_range(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user