1 /* SPDX-License-Identifier: GPL-2.0-only */ !! 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 2 /* 3 * Copyright (c) 2023 Ventana Micro Systems In !! 3 * arch/alpha/lib/clear_page.S >> 4 * >> 5 * Zero an entire page. 4 */ 6 */ 5 << 6 #include <linux/linkage.h> << 7 #include <linux/export.h> 7 #include <linux/export.h> 8 #include <asm/asm.h> !! 8 .text 9 #include <asm/alternative-macros.h> !! 9 .align 4 10 #include <asm/hwcap.h> !! 10 .global clear_page 11 #include <asm/insn-def.h> !! 11 .ent clear_page 12 #include <asm/page.h> !! 12 clear_page: 13 !! 13 .prologue 0 14 #define CBOZ_ALT(order, old, new) !! 14 15 ALTERNATIVE(old, new, 0, !! 15 lda $0,128 16 ((order) << 16) | RISCV_IS !! 16 nop 17 CONFIG_RISCV_ISA_ZICBOZ) !! 17 unop 18 !! 18 nop 19 /* void clear_page(void *page) */ !! 19 20 SYM_FUNC_START(clear_page) !! 20 1: stq $31,0($16) 21 li a2, PAGE_SIZE !! 21 stq $31,8($16) 22 !! 22 stq $31,16($16) 23 /* !! 23 stq $31,24($16) 24 * If Zicboz isn't present, or somehow !! 24 25 * size larger than 4K, then fallback !! 25 stq $31,32($16) 26 */ !! 26 stq $31,40($16) 27 CBOZ_ALT(12, "j .Lno_zicboz", "nop") !! 27 stq $31,48($16) 28 !! 28 subq $0,1,$0 29 lw a1, riscv_cboz_block_size !! 29 30 add a2, a0, a2 !! 30 stq $31,56($16) 31 .Lzero_loop: !! 31 addq $16,64,$16 32 CBO_ZERO(a0) !! 32 unop 33 add a0, a0, a1 !! 33 bne $0,1b 34 CBOZ_ALT(11, "bltu a0, a2, .Lzero_loop !! 34 35 CBO_ZERO(a0) << 36 add a0, a0, a1 << 37 CBOZ_ALT(10, "bltu a0, a2, .Lzero_loop << 38 CBO_ZERO(a0) << 39 add a0, a0, a1 << 40 CBO_ZERO(a0) << 41 add a0, a0, a1 << 42 CBOZ_ALT(9, "bltu a0, a2, .Lzero_loop; << 43 CBO_ZERO(a0) << 44 add a0, a0, a1 << 45 CBO_ZERO(a0) << 46 add a0, a0, a1 << 47 CBO_ZERO(a0) << 48 add a0, a0, a1 << 49 CBO_ZERO(a0) << 50 add a0, a0, a1 << 51 CBOZ_ALT(8, "bltu a0, a2, .Lzero_loop; << 52 CBO_ZERO(a0) << 53 add a0, a0, a1 << 54 CBO_ZERO(a0) << 55 add a0, a0, a1 << 56 CBO_ZERO(a0) << 57 add a0, a0, a1 << 58 CBO_ZERO(a0) << 59 add a0, a0, a1 << 60 CBO_ZERO(a0) << 61 add a0, a0, a1 << 62 CBO_ZERO(a0) << 63 add a0, a0, a1 << 64 CBO_ZERO(a0) << 65 add a0, a0, a1 << 66 CBO_ZERO(a0) << 67 add a0, a0, a1 << 68 bltu a0, a2, .Lzero_loop << 69 ret 35 ret 70 .Lno_zicboz: !! 36 nop 71 li a1, 0 !! 37 unop 72 tail __memset !! 38 nop 73 SYM_FUNC_END(clear_page) !! 39 74 EXPORT_SYMBOL(clear_page) !! 40 .end clear_page >> 41 EXPORT_SYMBOL(clear_page)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.