18c2ecf20Sopenharmony_ci/*
28c2ecf20Sopenharmony_ci * arch/xtensa/mm/misc.S
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Miscellaneous assembly functions.
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
78c2ecf20Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
88c2ecf20Sopenharmony_ci * for more details.
98c2ecf20Sopenharmony_ci *
108c2ecf20Sopenharmony_ci * Copyright (C) 2001 - 2007 Tensilica Inc.
118c2ecf20Sopenharmony_ci *
128c2ecf20Sopenharmony_ci * Chris Zankel	<chris@zankel.net>
138c2ecf20Sopenharmony_ci */
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci#include <linux/linkage.h>
178c2ecf20Sopenharmony_ci#include <linux/pgtable.h>
188c2ecf20Sopenharmony_ci#include <asm/page.h>
198c2ecf20Sopenharmony_ci#include <asm/asmmacro.h>
208c2ecf20Sopenharmony_ci#include <asm/cacheasm.h>
218c2ecf20Sopenharmony_ci#include <asm/tlbflush.h>
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci/*
258c2ecf20Sopenharmony_ci * clear_page and clear_user_page are the same for non-cache-aliased configs.
268c2ecf20Sopenharmony_ci *
278c2ecf20Sopenharmony_ci * clear_page (unsigned long page)
288c2ecf20Sopenharmony_ci *                    a2
298c2ecf20Sopenharmony_ci */
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ciENTRY(clear_page)
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci	abi_entry_default
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci	movi	a3, 0
368c2ecf20Sopenharmony_ci	__loopi	a2, a7, PAGE_SIZE, 32
378c2ecf20Sopenharmony_ci	s32i	a3, a2, 0
388c2ecf20Sopenharmony_ci	s32i	a3, a2, 4
398c2ecf20Sopenharmony_ci	s32i	a3, a2, 8
408c2ecf20Sopenharmony_ci	s32i	a3, a2, 12
418c2ecf20Sopenharmony_ci	s32i	a3, a2, 16
428c2ecf20Sopenharmony_ci	s32i	a3, a2, 20
438c2ecf20Sopenharmony_ci	s32i	a3, a2, 24
448c2ecf20Sopenharmony_ci	s32i	a3, a2, 28
458c2ecf20Sopenharmony_ci	__endla	a2, a7, 32
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci	abi_ret_default
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ciENDPROC(clear_page)
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci/*
528c2ecf20Sopenharmony_ci * copy_page and copy_user_page are the same for non-cache-aliased configs.
538c2ecf20Sopenharmony_ci *
548c2ecf20Sopenharmony_ci * copy_page (void *to, void *from)
558c2ecf20Sopenharmony_ci *               a2          a3
568c2ecf20Sopenharmony_ci */
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ciENTRY(copy_page)
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci	abi_entry_default
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci	__loopi a2, a4, PAGE_SIZE, 32
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci	l32i    a8, a3, 0
658c2ecf20Sopenharmony_ci	l32i    a9, a3, 4
668c2ecf20Sopenharmony_ci	s32i    a8, a2, 0
678c2ecf20Sopenharmony_ci	s32i    a9, a2, 4
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci	l32i    a8, a3, 8
708c2ecf20Sopenharmony_ci	l32i    a9, a3, 12
718c2ecf20Sopenharmony_ci	s32i    a8, a2, 8
728c2ecf20Sopenharmony_ci	s32i    a9, a2, 12
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci	l32i    a8, a3, 16
758c2ecf20Sopenharmony_ci	l32i    a9, a3, 20
768c2ecf20Sopenharmony_ci	s32i    a8, a2, 16
778c2ecf20Sopenharmony_ci	s32i    a9, a2, 20
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci	l32i    a8, a3, 24
808c2ecf20Sopenharmony_ci	l32i    a9, a3, 28
818c2ecf20Sopenharmony_ci	s32i    a8, a2, 24
828c2ecf20Sopenharmony_ci	s32i    a9, a2, 28
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci	addi    a2, a2, 32
858c2ecf20Sopenharmony_ci	addi    a3, a3, 32
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci	__endl  a2, a4
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci	abi_ret_default
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ciENDPROC(copy_page)
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci#ifdef CONFIG_MMU
948c2ecf20Sopenharmony_ci/*
958c2ecf20Sopenharmony_ci * If we have to deal with cache aliasing, we use temporary memory mappings
968c2ecf20Sopenharmony_ci * to ensure that the source and destination pages have the same color as
978c2ecf20Sopenharmony_ci * the virtual address. We use way 0 and 1 for temporary mappings in such cases.
988c2ecf20Sopenharmony_ci *
998c2ecf20Sopenharmony_ci * The temporary DTLB entries shouldn't be flushed by interrupts, but are
1008c2ecf20Sopenharmony_ci * flushed by preemptive task switches. Special code in the
1018c2ecf20Sopenharmony_ci * fast_second_level_miss handler re-established the temporary mapping.
1028c2ecf20Sopenharmony_ci * It requires that the PPNs for the destination and source addresses are
1038c2ecf20Sopenharmony_ci * in a6, and a7, respectively.
1048c2ecf20Sopenharmony_ci */
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci/* TLB miss exceptions are treated special in the following region */
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ciENTRY(__tlbtemp_mapping_start)
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ci#if (DCACHE_WAY_SIZE > PAGE_SIZE)
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_ci/*
1138c2ecf20Sopenharmony_ci * clear_page_alias(void *addr, unsigned long paddr)
1148c2ecf20Sopenharmony_ci *                     a2              a3
1158c2ecf20Sopenharmony_ci */
1168c2ecf20Sopenharmony_ci
1178c2ecf20Sopenharmony_ciENTRY(clear_page_alias)
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci	abi_entry_default
1208c2ecf20Sopenharmony_ci
1218c2ecf20Sopenharmony_ci	/* Skip setting up a temporary DTLB if not aliased low page. */
1228c2ecf20Sopenharmony_ci
1238c2ecf20Sopenharmony_ci	movi	a5, PAGE_OFFSET
1248c2ecf20Sopenharmony_ci	movi	a6, 0
1258c2ecf20Sopenharmony_ci	beqz	a3, 1f
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ci	/* Setup a temporary DTLB for the addr. */
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
1308c2ecf20Sopenharmony_ci	mov	a4, a2
1318c2ecf20Sopenharmony_ci	wdtlb	a6, a2
1328c2ecf20Sopenharmony_ci	dsync
1338c2ecf20Sopenharmony_ci
1348c2ecf20Sopenharmony_ci1:	movi	a3, 0
1358c2ecf20Sopenharmony_ci	__loopi	a2, a7, PAGE_SIZE, 32
1368c2ecf20Sopenharmony_ci	s32i	a3, a2, 0
1378c2ecf20Sopenharmony_ci	s32i	a3, a2, 4
1388c2ecf20Sopenharmony_ci	s32i	a3, a2, 8
1398c2ecf20Sopenharmony_ci	s32i	a3, a2, 12
1408c2ecf20Sopenharmony_ci	s32i	a3, a2, 16
1418c2ecf20Sopenharmony_ci	s32i	a3, a2, 20
1428c2ecf20Sopenharmony_ci	s32i	a3, a2, 24
1438c2ecf20Sopenharmony_ci	s32i	a3, a2, 28
1448c2ecf20Sopenharmony_ci	__endla	a2, a7, 32
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_ci	bnez	a6, 1f
1478c2ecf20Sopenharmony_ci	abi_ret_default
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ci	/* We need to invalidate the temporary idtlb entry, if any. */
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ci1:	idtlb	a4
1528c2ecf20Sopenharmony_ci	dsync
1538c2ecf20Sopenharmony_ci
1548c2ecf20Sopenharmony_ci	abi_ret_default
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ciENDPROC(clear_page_alias)
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ci/*
1598c2ecf20Sopenharmony_ci * copy_page_alias(void *to, void *from,
1608c2ecf20Sopenharmony_ci *			a2	  a3
1618c2ecf20Sopenharmony_ci *                 unsigned long to_paddr, unsigned long from_paddr)
1628c2ecf20Sopenharmony_ci *	        		 a4			 a5
1638c2ecf20Sopenharmony_ci */
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ciENTRY(copy_page_alias)
1668c2ecf20Sopenharmony_ci
1678c2ecf20Sopenharmony_ci	abi_entry_default
1688c2ecf20Sopenharmony_ci
1698c2ecf20Sopenharmony_ci	/* Skip setting up a temporary DTLB for destination if not aliased. */
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ci	movi	a6, 0
1728c2ecf20Sopenharmony_ci	movi	a7, 0
1738c2ecf20Sopenharmony_ci	beqz	a4, 1f
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_ci	/* Setup a temporary DTLB for destination. */
1768c2ecf20Sopenharmony_ci
1778c2ecf20Sopenharmony_ci	addi	a6, a4, (PAGE_KERNEL | _PAGE_HW_WRITE)
1788c2ecf20Sopenharmony_ci	wdtlb	a6, a2
1798c2ecf20Sopenharmony_ci	dsync
1808c2ecf20Sopenharmony_ci
1818c2ecf20Sopenharmony_ci	/* Skip setting up a temporary DTLB for source if not aliased. */
1828c2ecf20Sopenharmony_ci
1838c2ecf20Sopenharmony_ci1:	beqz	a5, 1f
1848c2ecf20Sopenharmony_ci
1858c2ecf20Sopenharmony_ci	/* Setup a temporary DTLB for source. */
1868c2ecf20Sopenharmony_ci
1878c2ecf20Sopenharmony_ci	addi	a7, a5, PAGE_KERNEL
1888c2ecf20Sopenharmony_ci	addi	a8, a3, 1				# way1
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ci	wdtlb	a7, a8
1918c2ecf20Sopenharmony_ci	dsync
1928c2ecf20Sopenharmony_ci
1938c2ecf20Sopenharmony_ci1:	__loopi a2, a4, PAGE_SIZE, 32
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ci	l32i    a8, a3, 0
1968c2ecf20Sopenharmony_ci	l32i    a9, a3, 4
1978c2ecf20Sopenharmony_ci	s32i    a8, a2, 0
1988c2ecf20Sopenharmony_ci	s32i    a9, a2, 4
1998c2ecf20Sopenharmony_ci
2008c2ecf20Sopenharmony_ci	l32i    a8, a3, 8
2018c2ecf20Sopenharmony_ci	l32i    a9, a3, 12
2028c2ecf20Sopenharmony_ci	s32i    a8, a2, 8
2038c2ecf20Sopenharmony_ci	s32i    a9, a2, 12
2048c2ecf20Sopenharmony_ci
2058c2ecf20Sopenharmony_ci	l32i    a8, a3, 16
2068c2ecf20Sopenharmony_ci	l32i    a9, a3, 20
2078c2ecf20Sopenharmony_ci	s32i    a8, a2, 16
2088c2ecf20Sopenharmony_ci	s32i    a9, a2, 20
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci	l32i    a8, a3, 24
2118c2ecf20Sopenharmony_ci	l32i    a9, a3, 28
2128c2ecf20Sopenharmony_ci	s32i    a8, a2, 24
2138c2ecf20Sopenharmony_ci	s32i    a9, a2, 28
2148c2ecf20Sopenharmony_ci
2158c2ecf20Sopenharmony_ci	addi    a2, a2, 32
2168c2ecf20Sopenharmony_ci	addi    a3, a3, 32
2178c2ecf20Sopenharmony_ci
2188c2ecf20Sopenharmony_ci	__endl  a2, a4
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ci	/* We need to invalidate any temporary mapping! */
2218c2ecf20Sopenharmony_ci
2228c2ecf20Sopenharmony_ci	bnez	a6, 1f
2238c2ecf20Sopenharmony_ci	bnez	a7, 2f
2248c2ecf20Sopenharmony_ci	abi_ret_default
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci1:	addi	a2, a2, -PAGE_SIZE
2278c2ecf20Sopenharmony_ci	idtlb	a2
2288c2ecf20Sopenharmony_ci	dsync
2298c2ecf20Sopenharmony_ci	bnez	a7, 2f
2308c2ecf20Sopenharmony_ci	abi_ret_default
2318c2ecf20Sopenharmony_ci
2328c2ecf20Sopenharmony_ci2:	addi	a3, a3, -PAGE_SIZE+1
2338c2ecf20Sopenharmony_ci	idtlb	a3
2348c2ecf20Sopenharmony_ci	dsync
2358c2ecf20Sopenharmony_ci
2368c2ecf20Sopenharmony_ci	abi_ret_default
2378c2ecf20Sopenharmony_ci
2388c2ecf20Sopenharmony_ciENDPROC(copy_page_alias)
2398c2ecf20Sopenharmony_ci
2408c2ecf20Sopenharmony_ci#endif
2418c2ecf20Sopenharmony_ci
2428c2ecf20Sopenharmony_ci#if (DCACHE_WAY_SIZE > PAGE_SIZE)
2438c2ecf20Sopenharmony_ci
2448c2ecf20Sopenharmony_ci/*
2458c2ecf20Sopenharmony_ci * void __flush_invalidate_dcache_page_alias (addr, phys)
2468c2ecf20Sopenharmony_ci *                                             a2    a3
2478c2ecf20Sopenharmony_ci */
2488c2ecf20Sopenharmony_ci
2498c2ecf20Sopenharmony_ciENTRY(__flush_invalidate_dcache_page_alias)
2508c2ecf20Sopenharmony_ci
2518c2ecf20Sopenharmony_ci	abi_entry_default
2528c2ecf20Sopenharmony_ci
2538c2ecf20Sopenharmony_ci	movi	a7, 0			# required for exception handler
2548c2ecf20Sopenharmony_ci	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
2558c2ecf20Sopenharmony_ci	mov	a4, a2
2568c2ecf20Sopenharmony_ci	wdtlb	a6, a2
2578c2ecf20Sopenharmony_ci	dsync
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_ci	___flush_invalidate_dcache_page a2 a3
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_ci	idtlb	a4
2628c2ecf20Sopenharmony_ci	dsync
2638c2ecf20Sopenharmony_ci
2648c2ecf20Sopenharmony_ci	abi_ret_default
2658c2ecf20Sopenharmony_ci
2668c2ecf20Sopenharmony_ciENDPROC(__flush_invalidate_dcache_page_alias)
2678c2ecf20Sopenharmony_ci
2688c2ecf20Sopenharmony_ci/*
2698c2ecf20Sopenharmony_ci * void __invalidate_dcache_page_alias (addr, phys)
2708c2ecf20Sopenharmony_ci *                                       a2    a3
2718c2ecf20Sopenharmony_ci */
2728c2ecf20Sopenharmony_ci
2738c2ecf20Sopenharmony_ciENTRY(__invalidate_dcache_page_alias)
2748c2ecf20Sopenharmony_ci
2758c2ecf20Sopenharmony_ci	abi_entry_default
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_ci	movi	a7, 0			# required for exception handler
2788c2ecf20Sopenharmony_ci	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
2798c2ecf20Sopenharmony_ci	mov	a4, a2
2808c2ecf20Sopenharmony_ci	wdtlb	a6, a2
2818c2ecf20Sopenharmony_ci	dsync
2828c2ecf20Sopenharmony_ci
2838c2ecf20Sopenharmony_ci	___invalidate_dcache_page a2 a3
2848c2ecf20Sopenharmony_ci
2858c2ecf20Sopenharmony_ci	idtlb	a4
2868c2ecf20Sopenharmony_ci	dsync
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_ci	abi_ret_default
2898c2ecf20Sopenharmony_ci
2908c2ecf20Sopenharmony_ciENDPROC(__invalidate_dcache_page_alias)
2918c2ecf20Sopenharmony_ci#endif
2928c2ecf20Sopenharmony_ci
2938c2ecf20Sopenharmony_ciENTRY(__tlbtemp_mapping_itlb)
2948c2ecf20Sopenharmony_ci
2958c2ecf20Sopenharmony_ci#if (ICACHE_WAY_SIZE > PAGE_SIZE)
2968c2ecf20Sopenharmony_ci
2978c2ecf20Sopenharmony_ciENTRY(__invalidate_icache_page_alias)
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_ci	abi_entry_default
3008c2ecf20Sopenharmony_ci
3018c2ecf20Sopenharmony_ci	addi	a6, a3, (PAGE_KERNEL_EXEC | _PAGE_HW_WRITE)
3028c2ecf20Sopenharmony_ci	mov	a4, a2
3038c2ecf20Sopenharmony_ci	witlb	a6, a2
3048c2ecf20Sopenharmony_ci	isync
3058c2ecf20Sopenharmony_ci
3068c2ecf20Sopenharmony_ci	___invalidate_icache_page a2 a3
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_ci	iitlb	a4
3098c2ecf20Sopenharmony_ci	isync
3108c2ecf20Sopenharmony_ci	abi_ret_default
3118c2ecf20Sopenharmony_ci
3128c2ecf20Sopenharmony_ciENDPROC(__invalidate_icache_page_alias)
3138c2ecf20Sopenharmony_ci
3148c2ecf20Sopenharmony_ci#endif
3158c2ecf20Sopenharmony_ci
3168c2ecf20Sopenharmony_ci/* End of special treatment in tlb miss exception */
3178c2ecf20Sopenharmony_ci
3188c2ecf20Sopenharmony_ciENTRY(__tlbtemp_mapping_end)
3198c2ecf20Sopenharmony_ci
3208c2ecf20Sopenharmony_ci#endif /* CONFIG_MMU
3218c2ecf20Sopenharmony_ci
3228c2ecf20Sopenharmony_ci/*
3238c2ecf20Sopenharmony_ci * void __invalidate_icache_page(ulong start)
3248c2ecf20Sopenharmony_ci */
3258c2ecf20Sopenharmony_ci
3268c2ecf20Sopenharmony_ciENTRY(__invalidate_icache_page)
3278c2ecf20Sopenharmony_ci
3288c2ecf20Sopenharmony_ci	abi_entry_default
3298c2ecf20Sopenharmony_ci
3308c2ecf20Sopenharmony_ci	___invalidate_icache_page a2 a3
3318c2ecf20Sopenharmony_ci	isync
3328c2ecf20Sopenharmony_ci
3338c2ecf20Sopenharmony_ci	abi_ret_default
3348c2ecf20Sopenharmony_ci
3358c2ecf20Sopenharmony_ciENDPROC(__invalidate_icache_page)
3368c2ecf20Sopenharmony_ci
3378c2ecf20Sopenharmony_ci/*
3388c2ecf20Sopenharmony_ci * void __invalidate_dcache_page(ulong start)
3398c2ecf20Sopenharmony_ci */
3408c2ecf20Sopenharmony_ci
3418c2ecf20Sopenharmony_ciENTRY(__invalidate_dcache_page)
3428c2ecf20Sopenharmony_ci
3438c2ecf20Sopenharmony_ci	abi_entry_default
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ci	___invalidate_dcache_page a2 a3
3468c2ecf20Sopenharmony_ci	dsync
3478c2ecf20Sopenharmony_ci
3488c2ecf20Sopenharmony_ci	abi_ret_default
3498c2ecf20Sopenharmony_ci
3508c2ecf20Sopenharmony_ciENDPROC(__invalidate_dcache_page)
3518c2ecf20Sopenharmony_ci
3528c2ecf20Sopenharmony_ci/*
3538c2ecf20Sopenharmony_ci * void __flush_invalidate_dcache_page(ulong start)
3548c2ecf20Sopenharmony_ci */
3558c2ecf20Sopenharmony_ci
3568c2ecf20Sopenharmony_ciENTRY(__flush_invalidate_dcache_page)
3578c2ecf20Sopenharmony_ci
3588c2ecf20Sopenharmony_ci	abi_entry_default
3598c2ecf20Sopenharmony_ci
3608c2ecf20Sopenharmony_ci	___flush_invalidate_dcache_page a2 a3
3618c2ecf20Sopenharmony_ci
3628c2ecf20Sopenharmony_ci	dsync
3638c2ecf20Sopenharmony_ci	abi_ret_default
3648c2ecf20Sopenharmony_ci
3658c2ecf20Sopenharmony_ciENDPROC(__flush_invalidate_dcache_page)
3668c2ecf20Sopenharmony_ci
3678c2ecf20Sopenharmony_ci/*
3688c2ecf20Sopenharmony_ci * void __flush_dcache_page(ulong start)
3698c2ecf20Sopenharmony_ci */
3708c2ecf20Sopenharmony_ci
3718c2ecf20Sopenharmony_ciENTRY(__flush_dcache_page)
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_ci	abi_entry_default
3748c2ecf20Sopenharmony_ci
3758c2ecf20Sopenharmony_ci	___flush_dcache_page a2 a3
3768c2ecf20Sopenharmony_ci
3778c2ecf20Sopenharmony_ci	dsync
3788c2ecf20Sopenharmony_ci	abi_ret_default
3798c2ecf20Sopenharmony_ci
3808c2ecf20Sopenharmony_ciENDPROC(__flush_dcache_page)
3818c2ecf20Sopenharmony_ci
3828c2ecf20Sopenharmony_ci/*
3838c2ecf20Sopenharmony_ci * void __invalidate_icache_range(ulong start, ulong size)
3848c2ecf20Sopenharmony_ci */
3858c2ecf20Sopenharmony_ci
3868c2ecf20Sopenharmony_ciENTRY(__invalidate_icache_range)
3878c2ecf20Sopenharmony_ci
3888c2ecf20Sopenharmony_ci	abi_entry_default
3898c2ecf20Sopenharmony_ci
3908c2ecf20Sopenharmony_ci	___invalidate_icache_range a2 a3 a4
3918c2ecf20Sopenharmony_ci	isync
3928c2ecf20Sopenharmony_ci
3938c2ecf20Sopenharmony_ci	abi_ret_default
3948c2ecf20Sopenharmony_ci
3958c2ecf20Sopenharmony_ciENDPROC(__invalidate_icache_range)
3968c2ecf20Sopenharmony_ci
3978c2ecf20Sopenharmony_ci/*
3988c2ecf20Sopenharmony_ci * void __flush_invalidate_dcache_range(ulong start, ulong size)
3998c2ecf20Sopenharmony_ci */
4008c2ecf20Sopenharmony_ci
4018c2ecf20Sopenharmony_ciENTRY(__flush_invalidate_dcache_range)
4028c2ecf20Sopenharmony_ci
4038c2ecf20Sopenharmony_ci	abi_entry_default
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ci	___flush_invalidate_dcache_range a2 a3 a4
4068c2ecf20Sopenharmony_ci	dsync
4078c2ecf20Sopenharmony_ci
4088c2ecf20Sopenharmony_ci	abi_ret_default
4098c2ecf20Sopenharmony_ci
4108c2ecf20Sopenharmony_ciENDPROC(__flush_invalidate_dcache_range)
4118c2ecf20Sopenharmony_ci
4128c2ecf20Sopenharmony_ci/*
4138c2ecf20Sopenharmony_ci * void _flush_dcache_range(ulong start, ulong size)
4148c2ecf20Sopenharmony_ci */
4158c2ecf20Sopenharmony_ci
4168c2ecf20Sopenharmony_ciENTRY(__flush_dcache_range)
4178c2ecf20Sopenharmony_ci
4188c2ecf20Sopenharmony_ci	abi_entry_default
4198c2ecf20Sopenharmony_ci
4208c2ecf20Sopenharmony_ci	___flush_dcache_range a2 a3 a4
4218c2ecf20Sopenharmony_ci	dsync
4228c2ecf20Sopenharmony_ci
4238c2ecf20Sopenharmony_ci	abi_ret_default
4248c2ecf20Sopenharmony_ci
4258c2ecf20Sopenharmony_ciENDPROC(__flush_dcache_range)
4268c2ecf20Sopenharmony_ci
4278c2ecf20Sopenharmony_ci/*
4288c2ecf20Sopenharmony_ci * void _invalidate_dcache_range(ulong start, ulong size)
4298c2ecf20Sopenharmony_ci */
4308c2ecf20Sopenharmony_ci
4318c2ecf20Sopenharmony_ciENTRY(__invalidate_dcache_range)
4328c2ecf20Sopenharmony_ci
4338c2ecf20Sopenharmony_ci	abi_entry_default
4348c2ecf20Sopenharmony_ci
4358c2ecf20Sopenharmony_ci	___invalidate_dcache_range a2 a3 a4
4368c2ecf20Sopenharmony_ci
4378c2ecf20Sopenharmony_ci	abi_ret_default
4388c2ecf20Sopenharmony_ci
4398c2ecf20Sopenharmony_ciENDPROC(__invalidate_dcache_range)
4408c2ecf20Sopenharmony_ci
4418c2ecf20Sopenharmony_ci/*
4428c2ecf20Sopenharmony_ci * void _invalidate_icache_all(void)
4438c2ecf20Sopenharmony_ci */
4448c2ecf20Sopenharmony_ci
4458c2ecf20Sopenharmony_ciENTRY(__invalidate_icache_all)
4468c2ecf20Sopenharmony_ci
4478c2ecf20Sopenharmony_ci	abi_entry_default
4488c2ecf20Sopenharmony_ci
4498c2ecf20Sopenharmony_ci	___invalidate_icache_all a2 a3
4508c2ecf20Sopenharmony_ci	isync
4518c2ecf20Sopenharmony_ci
4528c2ecf20Sopenharmony_ci	abi_ret_default
4538c2ecf20Sopenharmony_ci
4548c2ecf20Sopenharmony_ciENDPROC(__invalidate_icache_all)
4558c2ecf20Sopenharmony_ci
4568c2ecf20Sopenharmony_ci/*
4578c2ecf20Sopenharmony_ci * void _flush_invalidate_dcache_all(void)
4588c2ecf20Sopenharmony_ci */
4598c2ecf20Sopenharmony_ci
4608c2ecf20Sopenharmony_ciENTRY(__flush_invalidate_dcache_all)
4618c2ecf20Sopenharmony_ci
4628c2ecf20Sopenharmony_ci	abi_entry_default
4638c2ecf20Sopenharmony_ci
4648c2ecf20Sopenharmony_ci	___flush_invalidate_dcache_all a2 a3
4658c2ecf20Sopenharmony_ci	dsync
4668c2ecf20Sopenharmony_ci
4678c2ecf20Sopenharmony_ci	abi_ret_default
4688c2ecf20Sopenharmony_ci
4698c2ecf20Sopenharmony_ciENDPROC(__flush_invalidate_dcache_all)
4708c2ecf20Sopenharmony_ci
4718c2ecf20Sopenharmony_ci/*
4728c2ecf20Sopenharmony_ci * void _invalidate_dcache_all(void)
4738c2ecf20Sopenharmony_ci */
4748c2ecf20Sopenharmony_ci
4758c2ecf20Sopenharmony_ciENTRY(__invalidate_dcache_all)
4768c2ecf20Sopenharmony_ci
4778c2ecf20Sopenharmony_ci	abi_entry_default
4788c2ecf20Sopenharmony_ci
4798c2ecf20Sopenharmony_ci	___invalidate_dcache_all a2 a3
4808c2ecf20Sopenharmony_ci	dsync
4818c2ecf20Sopenharmony_ci
4828c2ecf20Sopenharmony_ci	abi_ret_default
4838c2ecf20Sopenharmony_ci
4848c2ecf20Sopenharmony_ciENDPROC(__invalidate_dcache_all)
485