cache.c 888 B

123456789101112131415161718192021222324252627282930313233
  1. #include <linux/module.h>
  2. #include <asm/io.h>
  3. #include <arch/cache.h>
  4. #include <arch/hwregs/dma.h>
  5. /* This file is used to workaround a cache bug, Guinness TR 106. */
  6. inline void flush_dma_descr(struct dma_descr_data *descr, int flush_buf)
  7. {
  8. /* Flush descriptor to make sure we get correct in_eop and after. */
  9. asm volatile ("ftagd [%0]" :: "r" (descr));
  10. /* Flush buffer pointed out by descriptor. */
  11. if (flush_buf)
  12. cris_flush_cache_range(phys_to_virt((unsigned)descr->buf),
  13. (unsigned)(descr->after - descr->buf));
  14. }
  15. EXPORT_SYMBOL(flush_dma_descr);
  16. void flush_dma_list(struct dma_descr_data *descr)
  17. {
  18. while (1) {
  19. flush_dma_descr(descr, 1);
  20. if (descr->eol)
  21. break;
  22. descr = phys_to_virt((unsigned)descr->next);
  23. }
  24. }
  25. EXPORT_SYMBOL(flush_dma_list);
  26. /* From cacheflush.S */
  27. EXPORT_SYMBOL(cris_flush_cache);
  28. /* From cacheflush.S */
  29. EXPORT_SYMBOL(cris_flush_cache_range);