| /* cache.S: cache management routines |
| * |
| * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. |
| * Written by David Howells (dhowells@redhat.com) |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation; either version |
| * 2 of the License, or (at your option) any later version. |
| */ |
| |
| #include <asm/spr-regs.h> |
| #include <asm/cache.h> |
| |
| .text |
| .p2align 4 |
| |
| ############################################################################### |
| # |
| # Write back a range of dcache |
| # - void frv_dcache_writeback(unsigned long start [GR8], unsigned long size [GR9]) |
| # |
| ############################################################################### |
| .globl frv_dcache_writeback |
| .type frv_dcache_writeback,@function |
| frv_dcache_writeback: |
| andi gr8,~(L1_CACHE_BYTES-1),gr8 |
| |
| 2: dcf @(gr8,gr0) |
| addi gr8,#L1_CACHE_BYTES,gr8 |
| cmp gr9,gr8,icc0 |
| bhi icc0,#2,2b |
| |
| membar |
| bralr |
| .size frv_dcache_writeback, .-frv_dcache_writeback |
| |
| ############################################################################## |
| # |
| # Invalidate a range of dcache and icache |
| # - void frv_cache_invalidate(unsigned long start [GR8], unsigned long end [GR9]); |
| # |
| ############################################################################### |
| .globl frv_cache_invalidate |
| .type frv_cache_invalidate,@function |
| frv_cache_invalidate: |
| andi gr8,~(L1_CACHE_BYTES-1),gr8 |
| |
| 2: dci @(gr8,gr0) |
| ici @(gr8,gr0) |
| addi gr8,#L1_CACHE_BYTES,gr8 |
| cmp gr9,gr8,icc0 |
| bhi icc0,#2,2b |
| |
| membar |
| bralr |
| .size frv_cache_invalidate, .-frv_cache_invalidate |
| |
| ############################################################################## |
| # |
| # Invalidate a range of icache |
| # - void frv_icache_invalidate(unsigned long start [GR8], unsigned long end [GR9]); |
| # |
| ############################################################################### |
| .globl frv_icache_invalidate |
| .type frv_icache_invalidate,@function |
| frv_icache_invalidate: |
| andi gr8,~(L1_CACHE_BYTES-1),gr8 |
| |
| 2: ici @(gr8,gr0) |
| addi gr8,#L1_CACHE_BYTES,gr8 |
| cmp gr9,gr8,icc0 |
| bhi icc0,#2,2b |
| |
| membar |
| bralr |
| .size frv_icache_invalidate, .-frv_icache_invalidate |
| |
| ############################################################################### |
| # |
| # Write back and invalidate a range of dcache and icache |
| # - void frv_cache_wback_inv(unsigned long start [GR8], unsigned long end [GR9]) |
| # |
| ############################################################################### |
| .globl frv_cache_wback_inv |
| .type frv_cache_wback_inv,@function |
| frv_cache_wback_inv: |
| andi gr8,~(L1_CACHE_BYTES-1),gr8 |
| |
| 2: dcf @(gr8,gr0) |
| ici @(gr8,gr0) |
| addi gr8,#L1_CACHE_BYTES,gr8 |
| cmp gr9,gr8,icc0 |
| bhi icc0,#2,2b |
| |
| membar |
| bralr |
| .size frv_cache_wback_inv, .-frv_cache_wback_inv |