l2cc: Do not repeat disabling the cache when the cache is already disabled
When l2cc is already in disable state, performing a disable operation again will flush incorrect cache data to memory Signed-off-by: zhangyuan21 <zhangyuan21@xiaomi.com>
This commit is contained in:
parent
69fd539886
commit
6605f95133
@ -437,6 +437,12 @@ void l2cc_enable(void)
|
||||
/* Invalidate and enable the cache (must be disabled to do this!) */
|
||||
|
||||
flags = enter_critical_section();
|
||||
|
||||
if ((getreg32(L2CC_CR) & L2CC_CR_L2CEN) != 0)
|
||||
{
|
||||
l2cc_disable();
|
||||
}
|
||||
|
||||
l2cc_invalidate_all();
|
||||
putreg32(L2CC_CR_L2CEN, L2CC_CR);
|
||||
ARM_DSB();
|
||||
@ -520,17 +526,11 @@ void l2cc_sync(void)
|
||||
void l2cc_invalidate_all(void)
|
||||
{
|
||||
irqstate_t flags;
|
||||
uint32_t regval;
|
||||
|
||||
/* Invalidate all ways */
|
||||
|
||||
flags = enter_critical_section();
|
||||
|
||||
/* Disable the L2 cache while we invalidate it */
|
||||
|
||||
regval = getreg32(L2CC_CR);
|
||||
l2cc_disable();
|
||||
|
||||
/* Invalidate all ways by writing the bit mask of ways to be invalidated
|
||||
* the Invalidate Way Register (IWR).
|
||||
*/
|
||||
@ -547,9 +547,6 @@ void l2cc_invalidate_all(void)
|
||||
|
||||
putreg32(0, L2CC_CSR);
|
||||
|
||||
/* Then re-enable the L2 cache if it was enabled before */
|
||||
|
||||
putreg32(regval, L2CC_CR);
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
|
||||
|
@ -437,6 +437,12 @@ void l2cc_enable(void)
|
||||
/* Invalidate and enable the cache (must be disabled to do this!) */
|
||||
|
||||
flags = enter_critical_section();
|
||||
|
||||
if ((getreg32(L2CC_CR) & L2CC_CR_L2CEN) != 0)
|
||||
{
|
||||
l2cc_disable();
|
||||
}
|
||||
|
||||
l2cc_invalidate_all();
|
||||
putreg32(L2CC_CR_L2CEN, L2CC_CR);
|
||||
ARM_DSB();
|
||||
@ -520,17 +526,11 @@ void l2cc_sync(void)
|
||||
void l2cc_invalidate_all(void)
|
||||
{
|
||||
irqstate_t flags;
|
||||
uint32_t regval;
|
||||
|
||||
/* Invalidate all ways */
|
||||
|
||||
flags = enter_critical_section();
|
||||
|
||||
/* Disable the L2 cache while we invalidate it */
|
||||
|
||||
regval = getreg32(L2CC_CR);
|
||||
l2cc_disable();
|
||||
|
||||
/* Invalidate all ways by writing the bit mask of ways to be invalidated
|
||||
* the Invalidate Way Register (IWR).
|
||||
*/
|
||||
@ -547,9 +547,6 @@ void l2cc_invalidate_all(void)
|
||||
|
||||
putreg32(0, L2CC_CSR);
|
||||
|
||||
/* Then re-enable the L2 cache if it was enabled before */
|
||||
|
||||
putreg32(regval, L2CC_CR);
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user