#include <linux/linkage.h>
#include <linux/pgtable.h>
#include <asm/page.h>
#include <asm/asmmacro.h>
#include <asm/cacheasm.h>
#include <asm/tlbflush.h>
ENTRY(clear_page)
abi_entry_default
movi a3, 0
__loopi a2, a7, PAGE_SIZE, 32
s32i a3, a2, 0
s32i a3, a2, 4
s32i a3, a2, 8
s32i a3, a2, 12
s32i a3, a2, 16
s32i a3, a2, 20
s32i a3, a2, 24
s32i a3, a2, 28
__endla a2, a7, 32
abi_ret_default
ENDPROC(clear_page)
EXPORT_SYMBOL(clear_page)
ENTRY(copy_page)
abi_entry_default
__loopi a2, a4, PAGE_SIZE, 32
l32i a8, a3, 0
l32i a9, a3, 4
s32i a8, a2, 0
s32i a9, a2, 4
l32i a8, a3, 8
l32i a9, a3, 12
s32i a8, a2, 8
s32i a9, a2, 12
l32i a8, a3, 16
l32i a9, a3, 20
s32i a8, a2, 16
s32i a9, a2, 20
l32i a8, a3, 24
l32i a9, a3, 28
s32i a8, a2, 24
s32i a9, a2, 28
addi a2, a2, 32
addi a3, a3, 32
__endl a2, a4
abi_ret_default
ENDPROC(copy_page)
EXPORT_SYMBOL(copy_page)
#ifdef CONFIG_MMU
ENTRY(__tlbtemp_mapping_start)
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
ENTRY(clear_page_alias)
abi_entry_default
movi a5, PAGE_OFFSET
addi a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
mov a4, a2
wdtlb a6, a2
dsync
movi a3, 0
__loopi a2, a7, PAGE_SIZE, 32
s32i a3, a2, 0
s32i a3, a2, 4
s32i a3, a2, 8
s32i a3, a2, 12
s32i a3, a2, 16
s32i a3, a2, 20
s32i a3, a2, 24
s32i a3, a2, 28
__endla a2, a7, 32
idtlb a4
dsync
abi_ret_default
ENDPROC(clear_page_alias)
ENTRY(copy_page_alias)
abi_entry_default
addi a6, a4, (PAGE_KERNEL | _PAGE_HW_WRITE)
wdtlb a6, a2
dsync
addi a7, a5, PAGE_KERNEL
addi a8, a3, 1 # way1
wdtlb a7, a8
dsync
1: __loopi a2, a4, PAGE_SIZE, 32
l32i a8, a3, 0
l32i a9, a3, 4
s32i a8, a2, 0
s32i a9, a2, 4
l32i a8, a3, 8
l32i a9, a3, 12
s32i a8, a2, 8
s32i a9, a2, 12
l32i a8, a3, 16
l32i a9, a3, 20
s32i a8, a2, 16
s32i a9, a2, 20
l32i a8, a3, 24
l32i a9, a3, 28
s32i a8, a2, 24
s32i a9, a2, 28
addi a2, a2, 32
addi a3, a3, 32
__endl a2, a4
addi a2, a2, -PAGE_SIZE
idtlb a2
dsync
addi a3, a3, -PAGE_SIZE+1
idtlb a3
dsync
abi_ret_default
ENDPROC(copy_page_alias)
#endif
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
ENTRY(__flush_invalidate_dcache_page_alias)
abi_entry_default
movi a7, 0 # required for exception handler
addi a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
mov a4, a2
wdtlb a6, a2
dsync
___flush_invalidate_dcache_page a2 a3
idtlb a4
dsync
abi_ret_default
ENDPROC(__flush_invalidate_dcache_page_alias)
ENTRY(__invalidate_dcache_page_alias)
abi_entry_default
movi a7, 0 # required for exception handler
addi a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
mov a4, a2
wdtlb a6, a2
dsync
___invalidate_dcache_page a2 a3
idtlb a4
dsync
abi_ret_default
ENDPROC(__invalidate_dcache_page_alias)
#endif
ENTRY(__tlbtemp_mapping_itlb)
#if (ICACHE_WAY_SIZE > PAGE_SIZE)
ENTRY(__invalidate_icache_page_alias)
abi_entry_default
addi a6, a3, (PAGE_KERNEL_EXEC | _PAGE_HW_WRITE)
mov a4, a2
witlb a6, a2
isync
___invalidate_icache_page a2 a3
iitlb a4
isync
abi_ret_default
ENDPROC(__invalidate_icache_page_alias)
#endif
ENTRY(__tlbtemp_mapping_end)
#endif
ENTRY(__invalidate_icache_page)
abi_entry_default
___invalidate_icache_page a2 a3
isync
abi_ret_default
ENDPROC(__invalidate_icache_page)
ENTRY(__invalidate_dcache_page)
abi_entry_default
___invalidate_dcache_page a2 a3
dsync
abi_ret_default
ENDPROC(__invalidate_dcache_page)
ENTRY(__flush_invalidate_dcache_page)
abi_entry_default
___flush_invalidate_dcache_page a2 a3
dsync
abi_ret_default
ENDPROC(__flush_invalidate_dcache_page)
ENTRY(__flush_dcache_page)
abi_entry_default
___flush_dcache_page a2 a3
dsync
abi_ret_default
ENDPROC(__flush_dcache_page)
ENTRY(__invalidate_icache_range)
abi_entry_default
___invalidate_icache_range a2 a3 a4
isync
abi_ret_default
ENDPROC(__invalidate_icache_range)
EXPORT_SYMBOL(__invalidate_icache_range)
ENTRY(__flush_invalidate_dcache_range)
abi_entry_default
___flush_invalidate_dcache_range a2 a3 a4
dsync
abi_ret_default
ENDPROC(__flush_invalidate_dcache_range)
ENTRY(__flush_dcache_range)
abi_entry_default
___flush_dcache_range a2 a3 a4
dsync
abi_ret_default
ENDPROC(__flush_dcache_range)
EXPORT_SYMBOL(__flush_dcache_range)
ENTRY(__invalidate_dcache_range)
abi_entry_default
___invalidate_dcache_range a2 a3 a4
abi_ret_default
ENDPROC(__invalidate_dcache_range)
EXPORT_SYMBOL(__invalidate_dcache_range)
ENTRY(__invalidate_icache_all)
abi_entry_default
___invalidate_icache_all a2 a3
isync
abi_ret_default
ENDPROC(__invalidate_icache_all)
ENTRY(__flush_invalidate_dcache_all)
abi_entry_default
___flush_invalidate_dcache_all a2 a3
dsync
abi_ret_default
ENDPROC(__flush_invalidate_dcache_all)
ENTRY(__invalidate_dcache_all)
abi_entry_default
___invalidate_dcache_all a2 a3
dsync
abi_ret_default
ENDPROC(__invalidate_dcache_all)