X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=module%2Fwarm_ops.S;h=499f7601b3c759a0fd8f0229502c9fbbf6a92554;hb=HEAD;hp=8752e050d4588559cdfe5300d6910c16cd6d61ad;hpb=198a1649dcb74c973706066d37bb955c139232b1;p=warm.git diff --git a/module/warm_ops.S b/module/warm_ops.S index 8752e05..499f760 100644 --- a/module/warm_ops.S +++ b/module/warm_ops.S @@ -1,9 +1,20 @@ -/* vim:filetype=armasm -*/ +/* + * Cache operations + * + * Author: Gražvydas "notaz" Ignotas + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef AUTOCONF_INCLUDED +#include +#endif -#include +#define CACHELINE_SZC #32 -#ifndef CONFIG_CPU_ARM926T +#if !defined(CONFIG_CPU_ARM926T) && !defined(CONFIG_CPU_ARM920T) #error CPU not supported #endif @@ -11,18 +22,41 @@ .align 2 .global warm_cop_clean_inval_d +.global warm_cop_clean_d + +#ifdef CONFIG_CPU_ARM926T + warm_cop_clean_inval_d: 0: mrc p15, 0, r15, c7, c14, 3 @ test, clean and invalidate bne 0b bx lr - -.global warm_cop_clean_d warm_cop_clean_d: 0: mrc p15, 0, r15, c7, c10, 3 @ test and clean bne 0b bx lr +#else + +/* comes from Linux kernel code */ +.macro warm_cop_wholecache_dop crm + mov r1, #0x000000e0 @ 8 segments +1: orr r3, r1, #0xfc000000 @ 64 entries +2: mcr p15, 0, r3, c7, \crm, 2 @ D index op + subs r3, r3, #1<<26 + bcs 2b @ entries 63 to 0 + subs r1, r1, #1<<5 + bcs 1b @ segments 7 to 0 + bx lr +.endm + +warm_cop_clean_inval_d: + warm_cop_wholecache_dop c14 + +warm_cop_clean_d: + warm_cop_wholecache_dop c10 + +#endif .global warm_cop_inval_d warm_cop_inval_d: @@ -60,11 +94,11 @@ warm_cop_drain_wb: #define WARM_COP_MK_RANGE_FUNC(name,f1,f2) \ .global name ;\ name: ;\ - bic r0, r0, #32-1 ;\ + bic r0, r0, CACHELINE_SZC-1 ;\ 0: f1 ;\ f2 ;\ - add r0, r0, #32 ;\ - subs r1, r1, #32 ;\ + add r0, r0, CACHELINE_SZC ;\ + subs r1, r1, CACHELINE_SZC ;\ bgt 0b ;\ bx lr @@ -84,3 +118,6 @@ warm_drain_wb_inval_tlb: mcr p15, 0, r0, c8, c7, 0 bx lr + +@ vim:filetype=armasm +