1013de2d6SGuo Ren // SPDX-License-Identifier: GPL-2.0 2013de2d6SGuo Ren // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. 3013de2d6SGuo Ren 4013de2d6SGuo Ren #include <linux/module.h> 5013de2d6SGuo Ren #include <linux/highmem.h> 6013de2d6SGuo Ren #include <linux/smp.h> 7aca52c39SMike Rapoport #include <linux/memblock.h> 8013de2d6SGuo Ren #include <asm/fixmap.h> 9013de2d6SGuo Ren #include <asm/tlbflush.h> 10013de2d6SGuo Ren #include <asm/cacheflush.h> 11013de2d6SGuo Ren 12013de2d6SGuo Ren unsigned long highstart_pfn, highend_pfn; 13013de2d6SGuo Ren kmap_flush_tlb(unsigned long addr)14525aaf9bSIra Weinyvoid kmap_flush_tlb(unsigned long addr) 15013de2d6SGuo Ren { 16525aaf9bSIra Weiny flush_tlb_one(addr); 17013de2d6SGuo Ren } 18525aaf9bSIra Weiny EXPORT_SYMBOL(kmap_flush_tlb); 19525aaf9bSIra Weiny kmap_init(void)20*5af627a0SThomas Gleixnervoid __init kmap_init(void) 21013de2d6SGuo Ren { 22013de2d6SGuo Ren unsigned long vaddr; 23013de2d6SGuo Ren pgd_t *pgd; 24013de2d6SGuo Ren pmd_t *pmd; 25013de2d6SGuo Ren pud_t *pud; 26013de2d6SGuo Ren pte_t *pte; 27013de2d6SGuo Ren 28013de2d6SGuo Ren vaddr = PKMAP_BASE; 29f136008fSGuo Ren fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, swapper_pg_dir); 30013de2d6SGuo Ren 31c910951aSMike Rapoport pgd = swapper_pg_dir + pgd_index(vaddr); 32013de2d6SGuo Ren pud = (pud_t *)pgd; 33013de2d6SGuo Ren pmd = pmd_offset(pud, vaddr); 34013de2d6SGuo Ren pte = pte_offset_kernel(pmd, vaddr); 35013de2d6SGuo Ren pkmap_page_table = pte; 36013de2d6SGuo Ren } 37