mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-30 16:35:37 +00:00
ARC: Cache: Move SLC status check into slc_entire_op() and slc_rgn_op()
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 execution and we call slc_entire_op() and slc_rgn_op() 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> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
This commit is contained in:
parent
05c6a26a04
commit
ea9f6f1e87
1 changed files with 11 additions and 5 deletions
|
@ -141,6 +141,9 @@ static void __slc_entire_op(const int op)
|
||||||
{
|
{
|
||||||
unsigned int ctrl;
|
unsigned int ctrl;
|
||||||
|
|
||||||
|
if (!slc_exists)
|
||||||
|
return;
|
||||||
|
|
||||||
ctrl = read_aux_reg(ARC_AUX_SLC_CTRL);
|
ctrl = read_aux_reg(ARC_AUX_SLC_CTRL);
|
||||||
|
|
||||||
if (!(op & OP_FLUSH)) /* i.e. OP_INV */
|
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 int ctrl;
|
||||||
unsigned long end;
|
unsigned long end;
|
||||||
|
|
||||||
|
if (!slc_exists)
|
||||||
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The Region Flush operation is specified by CTRL.RGN_OP[11..9]
|
* The Region Flush operation is specified by CTRL.RGN_OP[11..9]
|
||||||
* - b'000 (default) is Flush,
|
* - b'000 (default) is Flush,
|
||||||
|
@ -366,7 +372,7 @@ void invalidate_icache_all(void)
|
||||||
{
|
{
|
||||||
__ic_entire_invalidate();
|
__ic_entire_invalidate();
|
||||||
|
|
||||||
if (is_isa_arcv2() && slc_exists)
|
if (is_isa_arcv2())
|
||||||
__slc_entire_op(OP_INV);
|
__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)
|
if (!is_isa_arcv2() || !ioc_exists)
|
||||||
__dc_line_op(start, end - start, OP_INV);
|
__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);
|
__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)
|
if (!is_isa_arcv2() || !ioc_exists)
|
||||||
__dc_line_op(start, end - start, OP_FLUSH);
|
__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);
|
__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);
|
__dc_entire_op(OP_FLUSH_N_INV);
|
||||||
|
|
||||||
if (is_isa_arcv2() && slc_exists)
|
if (is_isa_arcv2())
|
||||||
__slc_entire_op(OP_FLUSH_N_INV);
|
__slc_entire_op(OP_FLUSH_N_INV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,6 +537,6 @@ void flush_dcache_all(void)
|
||||||
{
|
{
|
||||||
__dc_entire_op(OP_FLUSH);
|
__dc_entire_op(OP_FLUSH);
|
||||||
|
|
||||||
if (is_isa_arcv2() && slc_exists)
|
if (is_isa_arcv2())
|
||||||
__slc_entire_op(OP_FLUSH);
|
__slc_entire_op(OP_FLUSH);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue