xref: /kernel/linux/linux-6.6/arch/xtensa/mm/misc.S (revision 62306a36)
162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * arch/xtensa/mm/misc.S
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Miscellaneous assembly functions.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
762306a36Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
862306a36Sopenharmony_ci * for more details.
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * Copyright (C) 2001 - 2007 Tensilica Inc.
1162306a36Sopenharmony_ci *
1262306a36Sopenharmony_ci * Chris Zankel	<chris@zankel.net>
1362306a36Sopenharmony_ci */
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <linux/linkage.h>
1762306a36Sopenharmony_ci#include <linux/pgtable.h>
1862306a36Sopenharmony_ci#include <asm/page.h>
1962306a36Sopenharmony_ci#include <asm/asmmacro.h>
2062306a36Sopenharmony_ci#include <asm/cacheasm.h>
2162306a36Sopenharmony_ci#include <asm/tlbflush.h>
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci/*
2562306a36Sopenharmony_ci * clear_page and clear_user_page are the same for non-cache-aliased configs.
2662306a36Sopenharmony_ci *
2762306a36Sopenharmony_ci * clear_page (unsigned long page)
2862306a36Sopenharmony_ci *                    a2
2962306a36Sopenharmony_ci */
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciENTRY(clear_page)
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci	abi_entry_default
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	movi	a3, 0
3662306a36Sopenharmony_ci	__loopi	a2, a7, PAGE_SIZE, 32
3762306a36Sopenharmony_ci	s32i	a3, a2, 0
3862306a36Sopenharmony_ci	s32i	a3, a2, 4
3962306a36Sopenharmony_ci	s32i	a3, a2, 8
4062306a36Sopenharmony_ci	s32i	a3, a2, 12
4162306a36Sopenharmony_ci	s32i	a3, a2, 16
4262306a36Sopenharmony_ci	s32i	a3, a2, 20
4362306a36Sopenharmony_ci	s32i	a3, a2, 24
4462306a36Sopenharmony_ci	s32i	a3, a2, 28
4562306a36Sopenharmony_ci	__endla	a2, a7, 32
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci	abi_ret_default
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciENDPROC(clear_page)
5062306a36Sopenharmony_ciEXPORT_SYMBOL(clear_page)
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci/*
5362306a36Sopenharmony_ci * copy_page and copy_user_page are the same for non-cache-aliased configs.
5462306a36Sopenharmony_ci *
5562306a36Sopenharmony_ci * copy_page (void *to, void *from)
5662306a36Sopenharmony_ci *               a2          a3
5762306a36Sopenharmony_ci */
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ciENTRY(copy_page)
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci	abi_entry_default
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci	__loopi a2, a4, PAGE_SIZE, 32
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	l32i    a8, a3, 0
6662306a36Sopenharmony_ci	l32i    a9, a3, 4
6762306a36Sopenharmony_ci	s32i    a8, a2, 0
6862306a36Sopenharmony_ci	s32i    a9, a2, 4
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	l32i    a8, a3, 8
7162306a36Sopenharmony_ci	l32i    a9, a3, 12
7262306a36Sopenharmony_ci	s32i    a8, a2, 8
7362306a36Sopenharmony_ci	s32i    a9, a2, 12
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	l32i    a8, a3, 16
7662306a36Sopenharmony_ci	l32i    a9, a3, 20
7762306a36Sopenharmony_ci	s32i    a8, a2, 16
7862306a36Sopenharmony_ci	s32i    a9, a2, 20
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci	l32i    a8, a3, 24
8162306a36Sopenharmony_ci	l32i    a9, a3, 28
8262306a36Sopenharmony_ci	s32i    a8, a2, 24
8362306a36Sopenharmony_ci	s32i    a9, a2, 28
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci	addi    a2, a2, 32
8662306a36Sopenharmony_ci	addi    a3, a3, 32
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci	__endl  a2, a4
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci	abi_ret_default
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ciENDPROC(copy_page)
9362306a36Sopenharmony_ciEXPORT_SYMBOL(copy_page)
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci#ifdef CONFIG_MMU
9662306a36Sopenharmony_ci/*
9762306a36Sopenharmony_ci * If we have to deal with cache aliasing, we use temporary memory mappings
9862306a36Sopenharmony_ci * to ensure that the source and destination pages have the same color as
9962306a36Sopenharmony_ci * the virtual address. We use way 0 and 1 for temporary mappings in such cases.
10062306a36Sopenharmony_ci *
10162306a36Sopenharmony_ci * The temporary DTLB entries shouldn't be flushed by interrupts, but are
10262306a36Sopenharmony_ci * flushed by preemptive task switches. Special code in the
10362306a36Sopenharmony_ci * fast_second_level_miss handler re-established the temporary mapping.
10462306a36Sopenharmony_ci * It requires that the PPNs for the destination and source addresses are
10562306a36Sopenharmony_ci * in a6, and a7, respectively.
10662306a36Sopenharmony_ci */
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci/* TLB miss exceptions are treated special in the following region */
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ciENTRY(__tlbtemp_mapping_start)
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci#if (DCACHE_WAY_SIZE > PAGE_SIZE)
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci/*
11562306a36Sopenharmony_ci * clear_page_alias(void *addr, unsigned long paddr)
11662306a36Sopenharmony_ci *                     a2              a3
11762306a36Sopenharmony_ci */
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ciENTRY(clear_page_alias)
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci	abi_entry_default
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci	movi	a5, PAGE_OFFSET
12462306a36Sopenharmony_ci	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
12562306a36Sopenharmony_ci	mov	a4, a2
12662306a36Sopenharmony_ci	wdtlb	a6, a2
12762306a36Sopenharmony_ci	dsync
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci	movi	a3, 0
13062306a36Sopenharmony_ci	__loopi	a2, a7, PAGE_SIZE, 32
13162306a36Sopenharmony_ci	s32i	a3, a2, 0
13262306a36Sopenharmony_ci	s32i	a3, a2, 4
13362306a36Sopenharmony_ci	s32i	a3, a2, 8
13462306a36Sopenharmony_ci	s32i	a3, a2, 12
13562306a36Sopenharmony_ci	s32i	a3, a2, 16
13662306a36Sopenharmony_ci	s32i	a3, a2, 20
13762306a36Sopenharmony_ci	s32i	a3, a2, 24
13862306a36Sopenharmony_ci	s32i	a3, a2, 28
13962306a36Sopenharmony_ci	__endla	a2, a7, 32
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci	/* We need to invalidate the temporary dtlb entry. */
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci	idtlb	a4
14462306a36Sopenharmony_ci	dsync
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci	abi_ret_default
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ciENDPROC(clear_page_alias)
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci/*
15162306a36Sopenharmony_ci * copy_page_alias(void *to, void *from,
15262306a36Sopenharmony_ci *			a2	  a3
15362306a36Sopenharmony_ci *                 unsigned long to_paddr, unsigned long from_paddr)
15462306a36Sopenharmony_ci *	        		 a4			 a5
15562306a36Sopenharmony_ci */
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciENTRY(copy_page_alias)
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci	abi_entry_default
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci	/* Setup a temporary DTLB for destination. */
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci	addi	a6, a4, (PAGE_KERNEL | _PAGE_HW_WRITE)
16462306a36Sopenharmony_ci	wdtlb	a6, a2
16562306a36Sopenharmony_ci	dsync
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci	/* Setup a temporary DTLB for source. */
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci	addi	a7, a5, PAGE_KERNEL
17062306a36Sopenharmony_ci	addi	a8, a3, 1				# way1
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci	wdtlb	a7, a8
17362306a36Sopenharmony_ci	dsync
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci1:	__loopi a2, a4, PAGE_SIZE, 32
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci	l32i    a8, a3, 0
17862306a36Sopenharmony_ci	l32i    a9, a3, 4
17962306a36Sopenharmony_ci	s32i    a8, a2, 0
18062306a36Sopenharmony_ci	s32i    a9, a2, 4
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci	l32i    a8, a3, 8
18362306a36Sopenharmony_ci	l32i    a9, a3, 12
18462306a36Sopenharmony_ci	s32i    a8, a2, 8
18562306a36Sopenharmony_ci	s32i    a9, a2, 12
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci	l32i    a8, a3, 16
18862306a36Sopenharmony_ci	l32i    a9, a3, 20
18962306a36Sopenharmony_ci	s32i    a8, a2, 16
19062306a36Sopenharmony_ci	s32i    a9, a2, 20
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci	l32i    a8, a3, 24
19362306a36Sopenharmony_ci	l32i    a9, a3, 28
19462306a36Sopenharmony_ci	s32i    a8, a2, 24
19562306a36Sopenharmony_ci	s32i    a9, a2, 28
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci	addi    a2, a2, 32
19862306a36Sopenharmony_ci	addi    a3, a3, 32
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci	__endl  a2, a4
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci	/* We need to invalidate any temporary mapping! */
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci	addi	a2, a2, -PAGE_SIZE
20562306a36Sopenharmony_ci	idtlb	a2
20662306a36Sopenharmony_ci	dsync
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci	addi	a3, a3, -PAGE_SIZE+1
20962306a36Sopenharmony_ci	idtlb	a3
21062306a36Sopenharmony_ci	dsync
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci	abi_ret_default
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ciENDPROC(copy_page_alias)
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci#endif
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci#if (DCACHE_WAY_SIZE > PAGE_SIZE)
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci/*
22162306a36Sopenharmony_ci * void __flush_invalidate_dcache_page_alias (addr, phys)
22262306a36Sopenharmony_ci *                                             a2    a3
22362306a36Sopenharmony_ci */
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ciENTRY(__flush_invalidate_dcache_page_alias)
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci	abi_entry_default
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ci	movi	a7, 0			# required for exception handler
23062306a36Sopenharmony_ci	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
23162306a36Sopenharmony_ci	mov	a4, a2
23262306a36Sopenharmony_ci	wdtlb	a6, a2
23362306a36Sopenharmony_ci	dsync
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci	___flush_invalidate_dcache_page a2 a3
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci	idtlb	a4
23862306a36Sopenharmony_ci	dsync
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci	abi_ret_default
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_ciENDPROC(__flush_invalidate_dcache_page_alias)
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci/*
24562306a36Sopenharmony_ci * void __invalidate_dcache_page_alias (addr, phys)
24662306a36Sopenharmony_ci *                                       a2    a3
24762306a36Sopenharmony_ci */
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ciENTRY(__invalidate_dcache_page_alias)
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ci	abi_entry_default
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci	movi	a7, 0			# required for exception handler
25462306a36Sopenharmony_ci	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
25562306a36Sopenharmony_ci	mov	a4, a2
25662306a36Sopenharmony_ci	wdtlb	a6, a2
25762306a36Sopenharmony_ci	dsync
25862306a36Sopenharmony_ci
25962306a36Sopenharmony_ci	___invalidate_dcache_page a2 a3
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci	idtlb	a4
26262306a36Sopenharmony_ci	dsync
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci	abi_ret_default
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ciENDPROC(__invalidate_dcache_page_alias)
26762306a36Sopenharmony_ci#endif
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_ciENTRY(__tlbtemp_mapping_itlb)
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ci#if (ICACHE_WAY_SIZE > PAGE_SIZE)
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ciENTRY(__invalidate_icache_page_alias)
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ci	abi_entry_default
27662306a36Sopenharmony_ci
27762306a36Sopenharmony_ci	addi	a6, a3, (PAGE_KERNEL_EXEC | _PAGE_HW_WRITE)
27862306a36Sopenharmony_ci	mov	a4, a2
27962306a36Sopenharmony_ci	witlb	a6, a2
28062306a36Sopenharmony_ci	isync
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_ci	___invalidate_icache_page a2 a3
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci	iitlb	a4
28562306a36Sopenharmony_ci	isync
28662306a36Sopenharmony_ci	abi_ret_default
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ciENDPROC(__invalidate_icache_page_alias)
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_ci#endif
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci/* End of special treatment in tlb miss exception */
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ciENTRY(__tlbtemp_mapping_end)
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ci#endif /* CONFIG_MMU
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci/*
29962306a36Sopenharmony_ci * void __invalidate_icache_page(ulong start)
30062306a36Sopenharmony_ci */
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ciENTRY(__invalidate_icache_page)
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci	abi_entry_default
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci	___invalidate_icache_page a2 a3
30762306a36Sopenharmony_ci	isync
30862306a36Sopenharmony_ci
30962306a36Sopenharmony_ci	abi_ret_default
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ciENDPROC(__invalidate_icache_page)
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci/*
31462306a36Sopenharmony_ci * void __invalidate_dcache_page(ulong start)
31562306a36Sopenharmony_ci */
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_ciENTRY(__invalidate_dcache_page)
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_ci	abi_entry_default
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci	___invalidate_dcache_page a2 a3
32262306a36Sopenharmony_ci	dsync
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ci	abi_ret_default
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ciENDPROC(__invalidate_dcache_page)
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci/*
32962306a36Sopenharmony_ci * void __flush_invalidate_dcache_page(ulong start)
33062306a36Sopenharmony_ci */
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ciENTRY(__flush_invalidate_dcache_page)
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci	abi_entry_default
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ci	___flush_invalidate_dcache_page a2 a3
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ci	dsync
33962306a36Sopenharmony_ci	abi_ret_default
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ciENDPROC(__flush_invalidate_dcache_page)
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci/*
34462306a36Sopenharmony_ci * void __flush_dcache_page(ulong start)
34562306a36Sopenharmony_ci */
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ciENTRY(__flush_dcache_page)
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ci	abi_entry_default
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_ci	___flush_dcache_page a2 a3
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_ci	dsync
35462306a36Sopenharmony_ci	abi_ret_default
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ciENDPROC(__flush_dcache_page)
35762306a36Sopenharmony_ci
35862306a36Sopenharmony_ci/*
35962306a36Sopenharmony_ci * void __invalidate_icache_range(ulong start, ulong size)
36062306a36Sopenharmony_ci */
36162306a36Sopenharmony_ci
36262306a36Sopenharmony_ciENTRY(__invalidate_icache_range)
36362306a36Sopenharmony_ci
36462306a36Sopenharmony_ci	abi_entry_default
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci	___invalidate_icache_range a2 a3 a4
36762306a36Sopenharmony_ci	isync
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_ci	abi_ret_default
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ciENDPROC(__invalidate_icache_range)
37262306a36Sopenharmony_ciEXPORT_SYMBOL(__invalidate_icache_range)
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci/*
37562306a36Sopenharmony_ci * void __flush_invalidate_dcache_range(ulong start, ulong size)
37662306a36Sopenharmony_ci */
37762306a36Sopenharmony_ci
37862306a36Sopenharmony_ciENTRY(__flush_invalidate_dcache_range)
37962306a36Sopenharmony_ci
38062306a36Sopenharmony_ci	abi_entry_default
38162306a36Sopenharmony_ci
38262306a36Sopenharmony_ci	___flush_invalidate_dcache_range a2 a3 a4
38362306a36Sopenharmony_ci	dsync
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ci	abi_ret_default
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ciENDPROC(__flush_invalidate_dcache_range)
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_ci/*
39062306a36Sopenharmony_ci * void _flush_dcache_range(ulong start, ulong size)
39162306a36Sopenharmony_ci */
39262306a36Sopenharmony_ci
39362306a36Sopenharmony_ciENTRY(__flush_dcache_range)
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_ci	abi_entry_default
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci	___flush_dcache_range a2 a3 a4
39862306a36Sopenharmony_ci	dsync
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ci	abi_ret_default
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ciENDPROC(__flush_dcache_range)
40362306a36Sopenharmony_ciEXPORT_SYMBOL(__flush_dcache_range)
40462306a36Sopenharmony_ci
40562306a36Sopenharmony_ci/*
40662306a36Sopenharmony_ci * void _invalidate_dcache_range(ulong start, ulong size)
40762306a36Sopenharmony_ci */
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ciENTRY(__invalidate_dcache_range)
41062306a36Sopenharmony_ci
41162306a36Sopenharmony_ci	abi_entry_default
41262306a36Sopenharmony_ci
41362306a36Sopenharmony_ci	___invalidate_dcache_range a2 a3 a4
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ci	abi_ret_default
41662306a36Sopenharmony_ci
41762306a36Sopenharmony_ciENDPROC(__invalidate_dcache_range)
41862306a36Sopenharmony_ciEXPORT_SYMBOL(__invalidate_dcache_range)
41962306a36Sopenharmony_ci
42062306a36Sopenharmony_ci/*
42162306a36Sopenharmony_ci * void _invalidate_icache_all(void)
42262306a36Sopenharmony_ci */
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_ciENTRY(__invalidate_icache_all)
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_ci	abi_entry_default
42762306a36Sopenharmony_ci
42862306a36Sopenharmony_ci	___invalidate_icache_all a2 a3
42962306a36Sopenharmony_ci	isync
43062306a36Sopenharmony_ci
43162306a36Sopenharmony_ci	abi_ret_default
43262306a36Sopenharmony_ci
43362306a36Sopenharmony_ciENDPROC(__invalidate_icache_all)
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ci/*
43662306a36Sopenharmony_ci * void _flush_invalidate_dcache_all(void)
43762306a36Sopenharmony_ci */
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_ciENTRY(__flush_invalidate_dcache_all)
44062306a36Sopenharmony_ci
44162306a36Sopenharmony_ci	abi_entry_default
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_ci	___flush_invalidate_dcache_all a2 a3
44462306a36Sopenharmony_ci	dsync
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_ci	abi_ret_default
44762306a36Sopenharmony_ci
44862306a36Sopenharmony_ciENDPROC(__flush_invalidate_dcache_all)
44962306a36Sopenharmony_ci
45062306a36Sopenharmony_ci/*
45162306a36Sopenharmony_ci * void _invalidate_dcache_all(void)
45262306a36Sopenharmony_ci */
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_ciENTRY(__invalidate_dcache_all)
45562306a36Sopenharmony_ci
45662306a36Sopenharmony_ci	abi_entry_default
45762306a36Sopenharmony_ci
45862306a36Sopenharmony_ci	___invalidate_dcache_all a2 a3
45962306a36Sopenharmony_ci	dsync
46062306a36Sopenharmony_ci
46162306a36Sopenharmony_ci	abi_ret_default
46262306a36Sopenharmony_ci
46362306a36Sopenharmony_ciENDPROC(__invalidate_dcache_all)
464