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