18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#include <asm/shmparam.h> 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ciextern void flush_dcache_page(struct page *page); 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cistatic inline unsigned long pages_do_alias(unsigned long addr1, 98c2ecf20Sopenharmony_ci unsigned long addr2) 108c2ecf20Sopenharmony_ci{ 118c2ecf20Sopenharmony_ci return (addr1 ^ addr2) & (SHMLBA-1); 128c2ecf20Sopenharmony_ci} 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_cistatic inline void clear_user_page(void *addr, unsigned long vaddr, 158c2ecf20Sopenharmony_ci struct page *page) 168c2ecf20Sopenharmony_ci{ 178c2ecf20Sopenharmony_ci clear_page(addr); 188c2ecf20Sopenharmony_ci if (pages_do_alias((unsigned long) addr, vaddr & PAGE_MASK)) 198c2ecf20Sopenharmony_ci flush_dcache_page(page); 208c2ecf20Sopenharmony_ci} 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistatic inline void copy_user_page(void *to, void *from, unsigned long vaddr, 238c2ecf20Sopenharmony_ci struct page *page) 248c2ecf20Sopenharmony_ci{ 258c2ecf20Sopenharmony_ci copy_page(to, from); 268c2ecf20Sopenharmony_ci if (pages_do_alias((unsigned long) to, vaddr & PAGE_MASK)) 278c2ecf20Sopenharmony_ci flush_dcache_page(page); 288c2ecf20Sopenharmony_ci} 29