diff options
author | Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> | 2018-03-21 15:58:54 +0300 |
---|---|---|
committer | Alexey Brodkin <abrodkin@synopsys.com> | 2018-03-21 17:06:54 +0300 |
commit | 05c6a26a04c4bddc62d2c307b754ccc81878b303 (patch) | |
tree | 6512e9ea166cccf7d13c5390c96eec0de8e0987c /arch/arc | |
parent | c877a8911d1262d3f78e1f24a24ef2f5e1333676 (diff) | |
download | u-boot-05c6a26a04c4bddc62d2c307b754ccc81878b303.tar.gz u-boot-05c6a26a04c4bddc62d2c307b754ccc81878b303.tar.bz2 u-boot-05c6a26a04c4bddc62d2c307b754ccc81878b303.zip |
ARC: Cache: Use is_isa_arcv2() instead of CONFIG_ISA_ARCV2 ifdef
Use is_isa_arcv2() function where it is possible instead of
CONFIG_ISA_ARCV2 define check to make code cleaner at the same time
keeping pretty much the same functionality - code in branches
under "if (is_isa_arcv2())" won't be compiled if CONFIG_ISA_ARCV2
is not defined, still we need a couple of CONFIG_ISA_ARCV2
ifdefs to make compiler happy. That's because code in
!is_isa_x() branch gets compiled and only then gets optimized
away.
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 | 59 |
1 files changed, 29 insertions, 30 deletions
diff --git a/arch/arc/lib/cache.c b/arch/arc/lib/cache.c index efba789062..354dbc600e 100644 --- a/arch/arc/lib/cache.c +++ b/arch/arc/lib/cache.c @@ -117,7 +117,6 @@ bool icache_exists __section(".data") = false; #define CACHE_LINE_MASK (~(l1_line_sz - 1)) -#ifdef CONFIG_ISA_ARCV2 int slc_line_sz __section(".data"); bool slc_exists __section(".data") = false; bool ioc_exists __section(".data") = false; @@ -175,6 +174,8 @@ static void slc_upper_region_init(void) static void __slc_rgn_op(unsigned long paddr, unsigned long sz, const int op) { +#ifdef CONFIG_ISA_ARCV2 + unsigned int ctrl; unsigned long end; @@ -218,6 +219,8 @@ static void __slc_rgn_op(unsigned long paddr, unsigned long sz, const int op) read_aux_reg(ARC_AUX_SLC_CTRL); while (read_aux_reg(ARC_AUX_SLC_CTRL) & SLC_CTRL_BUSY); + +#endif /* CONFIG_ISA_ARCV2 */ } static void arc_ioc_setup(void) @@ -247,11 +250,11 @@ static void arc_ioc_setup(void) write_aux_reg(ARC_AUX_IO_COH_PARTIAL, 1); write_aux_reg(ARC_AUX_IO_COH_ENABLE, 1); } -#endif /* CONFIG_ISA_ARCV2 */ -#ifdef CONFIG_ISA_ARCV2 static void read_decode_cache_bcr_arcv2(void) { +#ifdef CONFIG_ISA_ARCV2 + union bcr_slc_cfg slc_cfg; union bcr_clust_cfg cbcr; union bcr_generic sbcr; @@ -266,8 +269,9 @@ static void read_decode_cache_bcr_arcv2(void) cbcr.word = read_aux_reg(ARC_BCR_CLUSTER); if (cbcr.fields.c && ioc_enable) ioc_exists = true; + +#endif /* CONFIG_ISA_ARCV2 */ } -#endif void read_decode_cache_bcr(void) { @@ -298,10 +302,10 @@ void cache_init(void) { read_decode_cache_bcr(); -#ifdef CONFIG_ISA_ARCV2 - read_decode_cache_bcr_arcv2(); + if (is_isa_arcv2()) + read_decode_cache_bcr_arcv2(); - if (ioc_exists) + if (is_isa_arcv2() && ioc_exists) arc_ioc_setup(); read_decode_mmu_bcr(); @@ -311,9 +315,8 @@ void cache_init(void) * only if PAE exists in current HW. So we had to check pae_exist * before using them. */ - if (slc_exists && pae_exists) + if (is_isa_arcv2() && slc_exists && pae_exists) slc_upper_region_init(); -#endif /* CONFIG_ISA_ARCV2 */ } int icache_status(void) @@ -363,10 +366,8 @@ void invalidate_icache_all(void) { __ic_entire_invalidate(); -#ifdef CONFIG_ISA_ARCV2 - if (slc_exists) + if (is_isa_arcv2() && slc_exists) __slc_entire_op(OP_INV); -#endif } int dcache_status(void) @@ -478,15 +479,16 @@ void invalidate_dcache_range(unsigned long start, unsigned long end) if (start >= end) return; -#ifdef CONFIG_ISA_ARCV2 - if (!ioc_exists) -#endif + /* + * ARCv1 -> call __dc_line_op + * ARCv2 && no IOC -> call __dc_line_op; call __slc_rgn_op + * ARCv2 && IOC enabled -> nothing + */ + if (!is_isa_arcv2() || !ioc_exists) __dc_line_op(start, end - start, OP_INV); -#ifdef CONFIG_ISA_ARCV2 - if (slc_exists && !ioc_exists) + if (is_isa_arcv2() && slc_exists && !ioc_exists) __slc_rgn_op(start, end - start, OP_INV); -#endif } void flush_dcache_range(unsigned long start, unsigned long end) @@ -494,15 +496,16 @@ void flush_dcache_range(unsigned long start, unsigned long end) if (start >= end) return; -#ifdef CONFIG_ISA_ARCV2 - if (!ioc_exists) -#endif + /* + * ARCv1 -> call __dc_line_op + * ARCv2 && no IOC -> call __dc_line_op; call __slc_rgn_op + * ARCv2 && IOC enabled -> nothing + */ + if (!is_isa_arcv2() || !ioc_exists) __dc_line_op(start, end - start, OP_FLUSH); -#ifdef CONFIG_ISA_ARCV2 - if (slc_exists && !ioc_exists) + if (is_isa_arcv2() && slc_exists && !ioc_exists) __slc_rgn_op(start, end - start, OP_FLUSH); -#endif } void flush_cache(unsigned long start, unsigned long size) @@ -520,18 +523,14 @@ void flush_n_invalidate_dcache_all(void) { __dc_entire_op(OP_FLUSH_N_INV); -#ifdef CONFIG_ISA_ARCV2 - if (slc_exists) + if (is_isa_arcv2() && slc_exists) __slc_entire_op(OP_FLUSH_N_INV); -#endif } void flush_dcache_all(void) { __dc_entire_op(OP_FLUSH); -#ifdef CONFIG_ISA_ARCV2 - if (slc_exists) + if (is_isa_arcv2() && slc_exists) __slc_entire_op(OP_FLUSH); -#endif } |