linux/arch/frv/lib/cache.S
<<
>>
Prefs
   1/* cache.S: cache management routines
   2 *
   3 * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
   4 * Written by David Howells (dhowells@redhat.com)
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * as published by the Free Software Foundation; either version
   9 * 2 of the License, or (at your option) any later version.
  10 */
  11
  12#include <asm/spr-regs.h>
  13#include <asm/cache.h>
  14
  15        .text
  16        .p2align        4
  17
  18###############################################################################
  19#
  20# Write back a range of dcache
  21# - void frv_dcache_writeback(unsigned long start [GR8], unsigned long size [GR9])
  22#
  23###############################################################################
  24        .globl          frv_dcache_writeback
  25        .type           frv_dcache_writeback,@function
  26frv_dcache_writeback:
  27        andi            gr8,~(L1_CACHE_BYTES-1),gr8
  28
  292:      dcf             @(gr8,gr0)
  30        addi            gr8,#L1_CACHE_BYTES,gr8
  31        cmp             gr9,gr8,icc0
  32        bhi             icc0,#2,2b
  33
  34        membar
  35        bralr
  36        .size           frv_dcache_writeback, .-frv_dcache_writeback
  37
  38##############################################################################
  39#
  40# Invalidate a range of dcache and icache
  41# - void frv_cache_invalidate(unsigned long start [GR8], unsigned long end [GR9]);
  42#
  43###############################################################################
  44        .globl          frv_cache_invalidate
  45        .type           frv_cache_invalidate,@function
  46frv_cache_invalidate:
  47        andi            gr8,~(L1_CACHE_BYTES-1),gr8
  48
  492:      dci             @(gr8,gr0)
  50        ici             @(gr8,gr0)
  51        addi            gr8,#L1_CACHE_BYTES,gr8
  52        cmp             gr9,gr8,icc0
  53        bhi             icc0,#2,2b
  54
  55        membar
  56        bralr
  57        .size           frv_cache_invalidate, .-frv_cache_invalidate
  58
  59##############################################################################
  60#
  61# Invalidate a range of icache
  62# - void frv_icache_invalidate(unsigned long start [GR8], unsigned long end [GR9]);
  63#
  64###############################################################################
  65        .globl          frv_icache_invalidate
  66        .type           frv_icache_invalidate,@function
  67frv_icache_invalidate:
  68        andi            gr8,~(L1_CACHE_BYTES-1),gr8
  69
  702:      ici             @(gr8,gr0)
  71        addi            gr8,#L1_CACHE_BYTES,gr8
  72        cmp             gr9,gr8,icc0
  73        bhi             icc0,#2,2b
  74
  75        membar
  76        bralr
  77        .size           frv_icache_invalidate, .-frv_icache_invalidate
  78
  79###############################################################################
  80#
  81# Write back and invalidate a range of dcache and icache
  82# - void frv_cache_wback_inv(unsigned long start [GR8], unsigned long end [GR9])
  83#
  84###############################################################################
  85        .globl          frv_cache_wback_inv
  86        .type           frv_cache_wback_inv,@function
  87frv_cache_wback_inv:
  88        andi            gr8,~(L1_CACHE_BYTES-1),gr8
  89
  902:      dcf             @(gr8,gr0)
  91        ici             @(gr8,gr0)
  92        addi            gr8,#L1_CACHE_BYTES,gr8
  93        cmp             gr9,gr8,icc0
  94        bhi             icc0,#2,2b
  95
  96        membar
  97        bralr
  98        .size           frv_cache_wback_inv, .-frv_cache_wback_inv
  99