mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-26 06:30:39 +00:00
MIPS: refactor L1 cache config reads to a macro
Reduce duplication between reading the configuration of the L1 dcache & icache by performing both using a macro which calculates the appropriate line & cache sizes from the coprocessor 0 Config1 register. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
This commit is contained in:
parent
4a5d8898bc
commit
536cb7ce1a
1 changed files with 41 additions and 56 deletions
|
@ -97,6 +97,43 @@ LEAF(mips_init_dcache)
|
||||||
9: jr ra
|
9: jr ra
|
||||||
END(mips_init_dcache)
|
END(mips_init_dcache)
|
||||||
|
|
||||||
|
.macro l1_info sz, line_sz, off
|
||||||
|
.set push
|
||||||
|
.set noat
|
||||||
|
|
||||||
|
mfc0 $1, CP0_CONFIG, 1
|
||||||
|
|
||||||
|
/* detect line size */
|
||||||
|
srl \line_sz, $1, \off + MIPS_CONF1_DL_SHIFT - MIPS_CONF1_DA_SHIFT
|
||||||
|
andi \line_sz, \line_sz, (MIPS_CONF1_DL >> MIPS_CONF1_DL_SHIFT)
|
||||||
|
move \sz, zero
|
||||||
|
beqz \line_sz, 10f
|
||||||
|
li \sz, 2
|
||||||
|
sllv \line_sz, \sz, \line_sz
|
||||||
|
|
||||||
|
/* detect associativity */
|
||||||
|
srl \sz, $1, \off + MIPS_CONF1_DA_SHIFT - MIPS_CONF1_DA_SHIFT
|
||||||
|
andi \sz, \sz, (MIPS_CONF1_DA >> MIPS_CONF1_DA_SHIFT)
|
||||||
|
addi \sz, \sz, 1
|
||||||
|
|
||||||
|
/* sz *= line_sz */
|
||||||
|
mul \sz, \sz, \line_sz
|
||||||
|
|
||||||
|
/* detect log32(sets) */
|
||||||
|
srl $1, $1, \off + MIPS_CONF1_DS_SHIFT - MIPS_CONF1_DA_SHIFT
|
||||||
|
andi $1, $1, (MIPS_CONF1_DS >> MIPS_CONF1_DS_SHIFT)
|
||||||
|
addiu $1, $1, 1
|
||||||
|
andi $1, $1, 0x7
|
||||||
|
|
||||||
|
/* sz <<= log32(sets) */
|
||||||
|
sllv \sz, \sz, $1
|
||||||
|
|
||||||
|
/* sz *= 32 */
|
||||||
|
li $1, 32
|
||||||
|
mul \sz, \sz, $1
|
||||||
|
10:
|
||||||
|
.set pop
|
||||||
|
.endm
|
||||||
/*
|
/*
|
||||||
* mips_cache_reset - low level initialisation of the primary caches
|
* mips_cache_reset - low level initialisation of the primary caches
|
||||||
*
|
*
|
||||||
|
@ -114,70 +151,18 @@ LEAF(mips_init_dcache)
|
||||||
NESTED(mips_cache_reset, 0, ra)
|
NESTED(mips_cache_reset, 0, ra)
|
||||||
move RA, ra
|
move RA, ra
|
||||||
|
|
||||||
#if !defined(CONFIG_SYS_ICACHE_SIZE) || !defined(CONFIG_SYS_DCACHE_SIZE) || \
|
|
||||||
!defined(CONFIG_SYS_CACHELINE_SIZE)
|
|
||||||
/* read Config1 for use below */
|
|
||||||
mfc0 t5, CP0_CONFIG, 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_CACHELINE_SIZE
|
|
||||||
li t9, CONFIG_SYS_CACHELINE_SIZE
|
|
||||||
li t8, CONFIG_SYS_CACHELINE_SIZE
|
|
||||||
#else
|
|
||||||
/* Detect I-cache line size. */
|
|
||||||
srl t8, t5, MIPS_CONF1_IL_SHIFT
|
|
||||||
andi t8, t8, (MIPS_CONF1_IL >> MIPS_CONF1_IL_SHIFT)
|
|
||||||
beqz t8, 1f
|
|
||||||
li t6, 2
|
|
||||||
sllv t8, t6, t8
|
|
||||||
|
|
||||||
1: /* Detect D-cache line size. */
|
|
||||||
srl t9, t5, MIPS_CONF1_DL_SHIFT
|
|
||||||
andi t9, t9, (MIPS_CONF1_DL >> MIPS_CONF1_DL_SHIFT)
|
|
||||||
beqz t9, 1f
|
|
||||||
li t6, 2
|
|
||||||
sllv t9, t6, t9
|
|
||||||
1:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_ICACHE_SIZE
|
#ifdef CONFIG_SYS_ICACHE_SIZE
|
||||||
li t2, CONFIG_SYS_ICACHE_SIZE
|
li t2, CONFIG_SYS_ICACHE_SIZE
|
||||||
|
li t8, CONFIG_SYS_CACHELINE_SIZE
|
||||||
#else
|
#else
|
||||||
/* Detect I-cache size. */
|
l1_info t2, t8, MIPS_CONF1_IA_SHIFT
|
||||||
srl t6, t5, MIPS_CONF1_IS_SHIFT
|
|
||||||
andi t6, t6, (MIPS_CONF1_IS >> MIPS_CONF1_IS_SHIFT)
|
|
||||||
li t4, 32
|
|
||||||
xori t2, t6, 0x7
|
|
||||||
beqz t2, 1f
|
|
||||||
addi t6, t6, 1
|
|
||||||
sllv t4, t4, t6
|
|
||||||
1: /* At this point t4 == I-cache sets. */
|
|
||||||
mul t2, t4, t8
|
|
||||||
srl t6, t5, MIPS_CONF1_IA_SHIFT
|
|
||||||
andi t6, t6, (MIPS_CONF1_IA >> MIPS_CONF1_IA_SHIFT)
|
|
||||||
addi t6, t6, 1
|
|
||||||
/* At this point t6 == I-cache ways. */
|
|
||||||
mul t2, t2, t6
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_DCACHE_SIZE
|
#ifdef CONFIG_SYS_DCACHE_SIZE
|
||||||
li t3, CONFIG_SYS_DCACHE_SIZE
|
li t3, CONFIG_SYS_DCACHE_SIZE
|
||||||
|
li t9, CONFIG_SYS_CACHELINE_SIZE
|
||||||
#else
|
#else
|
||||||
/* Detect D-cache size. */
|
l1_info t3, t9, MIPS_CONF1_DA_SHIFT
|
||||||
srl t6, t5, MIPS_CONF1_DS_SHIFT
|
|
||||||
andi t6, t6, (MIPS_CONF1_DS >> MIPS_CONF1_DS_SHIFT)
|
|
||||||
li t4, 32
|
|
||||||
xori t3, t6, 0x7
|
|
||||||
beqz t3, 1f
|
|
||||||
addi t6, t6, 1
|
|
||||||
sllv t4, t4, t6
|
|
||||||
1: /* At this point t4 == I-cache sets. */
|
|
||||||
mul t3, t4, t9
|
|
||||||
srl t6, t5, MIPS_CONF1_DA_SHIFT
|
|
||||||
andi t6, t6, (MIPS_CONF1_DA >> MIPS_CONF1_DA_SHIFT)
|
|
||||||
addi t6, t6, 1
|
|
||||||
/* At this point t6 == I-cache ways. */
|
|
||||||
mul t3, t3, t6
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Determine the largest L1 cache size */
|
/* Determine the largest L1 cache size */
|
||||||
|
|
Loading…
Reference in a new issue