forked from len0rd/rockbox
rk27xx: Fix commit_discard_idcache()
This version resembles how OF handle cache invalidates. This seems to fix mysterious data aborts on plugin/codec loading after introducing frequency scaling. Credit goes to mortalis for pinpointing the reason of aborts. Change-Id: I3477b3f65d593d7b43c36a0b06d863f71f000812
This commit is contained in:
parent
1c975eefd3
commit
72ebcbf73b
1 changed files with 17 additions and 7 deletions
|
@ -200,19 +200,29 @@ void udelay(unsigned usecs)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Invalidating both cache lines from single function
|
||||||
|
* gives sometimes strange data aborts.
|
||||||
|
* This version resembles how OF invalidates cache.
|
||||||
|
* noinline attribute is to guarantee that future
|
||||||
|
* gcc change will not decide to inline this call (although
|
||||||
|
* current arm-eabi version from our toolchain doesn't do that
|
||||||
|
*/
|
||||||
|
static void __attribute__((noinline)) cache_invalidate_way(int way)
|
||||||
|
{
|
||||||
|
/* Issue invalidata way command to the cache controler */
|
||||||
|
CACHEOP = ((way<<31)|0x2);
|
||||||
|
|
||||||
|
/* wait for invalidate process to complete */
|
||||||
|
while (CACHEOP & 0x03);
|
||||||
|
}
|
||||||
|
|
||||||
void commit_discard_idcache(void)
|
void commit_discard_idcache(void)
|
||||||
{
|
{
|
||||||
/* invalidate cache way 0 */
|
/* invalidate cache way 0 */
|
||||||
CACHEOP = 0x02;
|
cache_invalidate_way(0);
|
||||||
|
|
||||||
/* wait for invalidate process to complete */
|
|
||||||
while (CACHEOP & 0x03);
|
|
||||||
|
|
||||||
/* invalidate cache way 1 */
|
/* invalidate cache way 1 */
|
||||||
CACHEOP = 0x80000002;
|
cache_invalidate_way(1);
|
||||||
|
|
||||||
/* wait for invalidate process to complete */
|
|
||||||
while (CACHEOP & 0x03);
|
|
||||||
}
|
}
|
||||||
void commit_discard_dcache (void) __attribute__((alias("commit_discard_idcache")));
|
void commit_discard_dcache (void) __attribute__((alias("commit_discard_idcache")));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue