libpayload: armv7: Add cache control function to invalidate range.
When dealing with DMA, we need a function to invalidate cache without corrupting contents on main memory (clean). Change-Id: I28e632ae57a7b7ed1accee74e76045b92f92a699 Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/61078 Reviewed-by: Gabe Black <gabeblack@chromium.org> Commit-Queue: Gabe Black <gabeblack@chromium.org> Reviewed-on: http://review.coreboot.org/4345 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
committed by
Stefan Reinauer
parent
d0fa1d1a61
commit
cb0aeef0a9
@ -80,6 +80,7 @@ enum dcache_op {
|
|||||||
OP_DCISW,
|
OP_DCISW,
|
||||||
OP_DCCIMVAC,
|
OP_DCCIMVAC,
|
||||||
OP_DCCMVAC,
|
OP_DCCMVAC,
|
||||||
|
OP_DCIMVAC,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -220,6 +221,9 @@ static void dcache_op_mva(unsigned long addr,
|
|||||||
case OP_DCCMVAC:
|
case OP_DCCMVAC:
|
||||||
dccmvac(line);
|
dccmvac(line);
|
||||||
break;
|
break;
|
||||||
|
case OP_DCIMVAC:
|
||||||
|
dcimvac(line);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -238,6 +242,11 @@ void dcache_clean_invalidate_by_mva(unsigned long addr, unsigned long len)
|
|||||||
dcache_op_mva(addr, len, OP_DCCIMVAC);
|
dcache_op_mva(addr, len, OP_DCCIMVAC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dcache_invalidate_by_mva(unsigned long addr, unsigned long len)
|
||||||
|
{
|
||||||
|
dcache_op_mva(addr, len, OP_DCIMVAC);
|
||||||
|
}
|
||||||
|
|
||||||
void dcache_mmu_disable(void)
|
void dcache_mmu_disable(void)
|
||||||
{
|
{
|
||||||
uint32_t sctlr;
|
uint32_t sctlr;
|
||||||
|
@ -266,6 +266,9 @@ void dcache_clean_by_mva(unsigned long addr, unsigned long len);
|
|||||||
/* dcache clean and invalidate by modified virtual address to PoC */
|
/* dcache clean and invalidate by modified virtual address to PoC */
|
||||||
void dcache_clean_invalidate_by_mva(unsigned long addr, unsigned long len);
|
void dcache_clean_invalidate_by_mva(unsigned long addr, unsigned long len);
|
||||||
|
|
||||||
|
/* dcache invalidate by modified virtual address to PoC */
|
||||||
|
void dcache_invalidate_by_mva(unsigned long addr, unsigned long len);
|
||||||
|
|
||||||
/* dcache invalidate all (on current level given by CCSELR) */
|
/* dcache invalidate all (on current level given by CCSELR) */
|
||||||
void dcache_invalidate_all(void);
|
void dcache_invalidate_all(void);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user