linux/arch/sh/include/asm/uncached.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __ASM_SH_UNCACHED_H
   3#define __ASM_SH_UNCACHED_H
   4
   5#include <linux/bug.h>
   6
   7#ifdef CONFIG_UNCACHED_MAPPING
   8extern unsigned long cached_to_uncached;
   9extern unsigned long uncached_size;
  10extern unsigned long uncached_start, uncached_end;
  11
  12extern int virt_addr_uncached(unsigned long kaddr);
  13extern void uncached_init(void);
  14extern void uncached_resize(unsigned long size);
  15
  16/*
  17 * Jump to uncached area.
  18 * When handling TLB or caches, we need to do it from an uncached area.
  19 */
  20#define jump_to_uncached()                      \
  21do {                                            \
  22        unsigned long __dummy;                  \
  23                                                \
  24        __asm__ __volatile__(                   \
  25                "mova   1f, %0\n\t"             \
  26                "add    %1, %0\n\t"             \
  27                "jmp    @%0\n\t"                \
  28                " nop\n\t"                      \
  29                ".balign 4\n"                   \
  30                "1:"                            \
  31                : "=&z" (__dummy)               \
  32                : "r" (cached_to_uncached));    \
  33} while (0)
  34
  35/*
  36 * Back to cached area.
  37 */
  38#define back_to_cached()                                \
  39do {                                                    \
  40        unsigned long __dummy;                          \
  41        ctrl_barrier();                                 \
  42        __asm__ __volatile__(                           \
  43                "mov.l  1f, %0\n\t"                     \
  44                "jmp    @%0\n\t"                        \
  45                " nop\n\t"                              \
  46                ".balign 4\n"                           \
  47                "1:     .long 2f\n"                     \
  48                "2:"                                    \
  49                : "=&r" (__dummy));                     \
  50} while (0)
  51#else
  52#define virt_addr_uncached(kaddr)       (0)
  53#define uncached_init()                 do { } while (0)
  54#define uncached_resize(size)           BUG()
  55#define jump_to_uncached()              do { } while (0)
  56#define back_to_cached()                do { } while (0)
  57#endif
  58
  59#endif /* __ASM_SH_UNCACHED_H */
  60