dccp: do not assume DCCP code is non preemptible
[linux/fpc-iii.git] / arch / mn10300 / mm / cache-dbg-inv-by-reg.S
blobc4e6252941b11364f8941f916b2a356bb0cefadb
1 /* MN10300 CPU cache invalidation routines, using automatic purge registers
2  *
3  * Copyright (C) 2011 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 Licence
8  * as published by the Free Software Foundation; either version
9  * 2 of the Licence, or (at your option) any later version.
10  */
11 #include <linux/sys.h>
12 #include <linux/linkage.h>
13 #include <asm/cache.h>
14 #include <asm/irqflags.h>
15 #include <asm/cacheflush.h>
16 #include "cache.inc"
18         .am33_2
20         .globl  debugger_local_cache_flushinv_one
22 ###############################################################################
24 # void debugger_local_cache_flushinv_one(u8 *addr)
26 # Invalidate one particular cacheline if it's in the icache
28 ###############################################################################
29         ALIGN
30         .globl  debugger_local_cache_flushinv_one
31         .type   debugger_local_cache_flushinv_one,@function
32 debugger_local_cache_flushinv_one:
33         mov     d0,a1
35         mov     CHCTR,a0
36         movhu   (a0),d0
37         btst    CHCTR_ICEN,d0
38         beq     mn10300_local_icache_inv_range_reg_end
40         LOCAL_CLI_SAVE(d1)
42         mov     ICIVCR,a0
44         # wait for the invalidator to quiesce
45         setlb
46         mov     (a0),d0
47         btst    ICIVCR_ICIVBSY,d0
48         lne
50         # set the mask
51         mov     ~L1_CACHE_TAG_MASK,d0
52         mov     d0,(ICIVMR)
54         # invalidate the cache line at the given address
55         and     ~L1_CACHE_TAG_MASK,a1
56         or      ICIVCR_ICI,a1
57         mov     a1,(a0)
59         # wait for the invalidator to quiesce again
60         setlb
61         mov     (a0),d0
62         btst    ICIVCR_ICIVBSY,d0
63         lne
65         LOCAL_IRQ_RESTORE(d1)
67 mn10300_local_icache_inv_range_reg_end:
68         ret     [],0
69         .size   debugger_local_cache_flushinv_one,.-debugger_local_cache_flushinv_one