X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=warm.git;a=blobdiff_plain;f=module%2Fwarm_ops.S;fp=module%2Fwarm_ops.S;h=499f7601b3c759a0fd8f0229502c9fbbf6a92554;hp=541d69dec1afbd68b88bd91becc241d3c2a5145f;hb=cc9517321fda63efa03335ff0c47540394fd93ce;hpb=8d04105aa13941487ebc8f647b3c1e368c2c55fc diff --git a/module/warm_ops.S b/module/warm_ops.S index 541d69d..499f760 100644 --- a/module/warm_ops.S +++ b/module/warm_ops.S @@ -1,11 +1,20 @@ -/* vim:filetype=armasm -*/ - -#include +/* + * 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 #define CACHELINE_SZC #32 -#ifndef CONFIG_CPU_ARM926T +#if !defined(CONFIG_CPU_ARM926T) && !defined(CONFIG_CPU_ARM920T) #error CPU not supported #endif @@ -13,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: @@ -86,3 +118,6 @@ warm_drain_wb_inval_tlb: mcr p15, 0, r0, c8, c7, 0 bx lr + +@ vim:filetype=armasm +