forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 958e46acc8e900e8569dd467c1af9b8d2d019394
kernel/arch/nds32/include/asm/highmem.h
....@@ -1,13 +1,11 @@
1
-// SPDX-License-Identifier: GPL-2.0
1
+/* SPDX-License-Identifier: GPL-2.0 */
22 // Copyright (C) 2005-2017 Andes Technology Corporation
33
44 #ifndef _ASM_HIGHMEM_H
55 #define _ASM_HIGHMEM_H
66
77 #include <asm/proc-fns.h>
8
-#include <asm/kmap_types.h>
98 #include <asm/fixmap.h>
10
-#include <asm/pgtable.h>
119
1210 /*
1311 * Right now we initialize only a single pte table. It can be extended
....@@ -32,7 +30,6 @@
3230 #define LAST_PKMAP_MASK (LAST_PKMAP - 1)
3331 #define PKMAP_NR(virt) (((virt) - (PKMAP_BASE)) >> PAGE_SHIFT)
3432 #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT))
35
-#define kmap_prot PAGE_KERNEL
3633
3734 static inline void flush_cache_kmaps(void)
3835 {
....@@ -44,22 +41,25 @@
4441
4542 extern pte_t *pkmap_page_table;
4643
47
-extern void *kmap_high(struct page *page);
48
-extern void kunmap_high(struct page *page);
49
-
5044 extern void kmap_init(void);
5145
5246 /*
53
- * The following functions are already defined by <linux/highmem.h>
54
- * when CONFIG_HIGHMEM is not set.
47
+ * FIXME: The below looks broken vs. a kmap_atomic() in task context which
48
+ * is interupted and another kmap_atomic() happens in interrupt context.
49
+ * But what do I know about nds32. -- tglx
5550 */
56
-#ifdef CONFIG_HIGHMEM
57
-extern void *kmap(struct page *page);
58
-extern void kunmap(struct page *page);
59
-extern void *kmap_atomic(struct page *page);
60
-extern void __kunmap_atomic(void *kvaddr);
61
-extern void *kmap_atomic_pfn(unsigned long pfn);
62
-extern struct page *kmap_atomic_to_page(void *ptr);
63
-#endif
51
+#define arch_kmap_local_post_map(vaddr, pteval) \
52
+ do { \
53
+ __nds32__tlbop_inv(vaddr); \
54
+ __nds32__mtsr_dsb(vaddr, NDS32_SR_TLB_VPN); \
55
+ __nds32__tlbop_rwr(pteval); \
56
+ __nds32__isb(); \
57
+ } while (0)
58
+
59
+#define arch_kmap_local_pre_unmap(vaddr) \
60
+ do { \
61
+ __nds32__tlbop_inv(vaddr); \
62
+ __nds32__isb(); \
63
+ } while (0)
6464
6565 #endif