Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 130553
b: refs/heads/master
c: a8ca8b6
h: refs/heads/master
i:
  130551: 71d1176
v: v3
  • Loading branch information
Ralf Baechle committed Jan 30, 2009
1 parent 35e9e02 commit 69a81a2
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 012703e0fc9fb1d6cdf778c49f45b796a85ef5bc
refs/heads/master: a8ca8b64e3fdfec17679cba0ca5ce6e3ffed092d
22 changes: 21 additions & 1 deletion trunk/arch/mips/mm/c-r4k.c
Original file line number Diff line number Diff line change
Expand Up @@ -618,15 +618,35 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
if (cpu_has_inclusive_pcaches) {
if (size >= scache_size)
r4k_blast_scache();
else
else {
unsigned long lsize = cpu_scache_line_size();
unsigned long almask = ~(lsize - 1);

/*
* There is no clearly documented alignment requirement
* for the cache instruction on MIPS processors and
* some processors, among them the RM5200 and RM7000
* QED processors will throw an address error for cache
* hit ops with insufficient alignment. Solved by
* aligning the address to cache line size.
*/
cache_op(Hit_Writeback_Inv_SD, addr & almask);
cache_op(Hit_Writeback_Inv_SD,
(addr + size - 1) & almask);
blast_inv_scache_range(addr, addr + size);
}
return;
}

if (cpu_has_safe_index_cacheops && size >= dcache_size) {
r4k_blast_dcache();
} else {
unsigned long lsize = cpu_dcache_line_size();
unsigned long almask = ~(lsize - 1);

R4600_HIT_CACHEOP_WAR_IMPL;
cache_op(Hit_Writeback_Inv_D, addr & almask);
cache_op(Hit_Writeback_Inv_D, (addr + size - 1) & almask);
blast_inv_dcache_range(addr, addr + size);
}

Expand Down

0 comments on commit 69a81a2

Please sign in to comment.