forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/arch/arm/include/asm/highmem.h
....@@ -2,15 +2,14 @@
22 #ifndef _ASM_HIGHMEM_H
33 #define _ASM_HIGHMEM_H
44
5
-#include <asm/kmap_types.h>
5
+#include <asm/kmap_size.h>
6
+#include <asm/fixmap.h>
67
78 #define PKMAP_BASE (PAGE_OFFSET - PMD_SIZE)
89 #define LAST_PKMAP PTRS_PER_PTE
910 #define LAST_PKMAP_MASK (LAST_PKMAP - 1)
1011 #define PKMAP_NR(virt) (((virt) - PKMAP_BASE) >> PAGE_SHIFT)
1112 #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT))
12
-
13
-#define kmap_prot PAGE_KERNEL
1413
1514 #define flush_cache_kmaps() \
1615 do { \
....@@ -19,9 +18,6 @@
1918 } while (0)
2019
2120 extern pte_t *pkmap_page_table;
22
-
23
-extern void *kmap_high(struct page *page);
24
-extern void kunmap_high(struct page *page);
2521
2622 /*
2723 * The reason for kmap_high_get() is to ensure that the currently kmap'd
....@@ -51,23 +47,32 @@
5147
5248 #ifdef ARCH_NEEDS_KMAP_HIGH_GET
5349 extern void *kmap_high_get(struct page *page);
54
-#else
50
+
51
+static inline void *arch_kmap_local_high_get(struct page *page)
52
+{
53
+ if (IS_ENABLED(CONFIG_DEBUG_HIGHMEM) && !cache_is_vivt())
54
+ return NULL;
55
+ return kmap_high_get(page);
56
+}
57
+#define arch_kmap_local_high_get arch_kmap_local_high_get
58
+
59
+#else /* ARCH_NEEDS_KMAP_HIGH_GET */
5560 static inline void *kmap_high_get(struct page *page)
5661 {
5762 return NULL;
5863 }
59
-#endif
64
+#endif /* !ARCH_NEEDS_KMAP_HIGH_GET */
6065
61
-/*
62
- * The following functions are already defined by <linux/highmem.h>
63
- * when CONFIG_HIGHMEM is not set.
64
- */
65
-#ifdef CONFIG_HIGHMEM
66
-extern void *kmap(struct page *page);
67
-extern void kunmap(struct page *page);
68
-extern void *kmap_atomic(struct page *page);
69
-extern void __kunmap_atomic(void *kvaddr);
70
-extern void *kmap_atomic_pfn(unsigned long pfn);
71
-#endif
66
+#define arch_kmap_local_post_map(vaddr, pteval) \
67
+ local_flush_tlb_kernel_page(vaddr)
68
+
69
+#define arch_kmap_local_pre_unmap(vaddr) \
70
+do { \
71
+ if (cache_is_vivt()) \
72
+ __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE); \
73
+} while (0)
74
+
75
+#define arch_kmap_local_post_unmap(vaddr) \
76
+ local_flush_tlb_kernel_page(vaddr)
7277
7378 #endif