forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/arch/arm/mm/ioremap.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * linux/arch/arm/mm/ioremap.c
34 *
....@@ -26,6 +27,7 @@
2627 #include <linux/vmalloc.h>
2728 #include <linux/io.h>
2829 #include <linux/sizes.h>
30
+#include <linux/memblock.h>
2931
3032 #include <asm/cp15.h>
3133 #include <asm/cputype.h>
....@@ -140,14 +142,8 @@
140142 static void unmap_area_sections(unsigned long virt, unsigned long size)
141143 {
142144 unsigned long addr = virt, end = virt + (size & ~(SZ_1M - 1));
143
- pgd_t *pgd;
144
- pud_t *pud;
145
- pmd_t *pmdp;
145
+ pmd_t *pmdp = pmd_off_k(addr);
146146
147
- flush_cache_vunmap(addr, end);
148
- pgd = pgd_offset_k(addr);
149
- pud = pud_offset(pgd, addr);
150
- pmdp = pmd_offset(pud, addr);
151147 do {
152148 pmd_t pmd = *pmdp;
153149
....@@ -188,9 +184,7 @@
188184 size_t size, const struct mem_type *type)
189185 {
190186 unsigned long addr = virt, end = virt + size;
191
- pgd_t *pgd;
192
- pud_t *pud;
193
- pmd_t *pmd;
187
+ pmd_t *pmd = pmd_off_k(addr);
194188
195189 /*
196190 * Remove and free any PTE-based mapping, and
....@@ -198,9 +192,6 @@
198192 */
199193 unmap_area_sections(virt, size);
200194
201
- pgd = pgd_offset_k(addr);
202
- pud = pud_offset(pgd, addr);
203
- pmd = pmd_offset(pud, addr);
204195 do {
205196 pmd[0] = __pmd(__pfn_to_phys(pfn) | type->prot_sect);
206197 pfn += SZ_1M >> PAGE_SHIFT;
....@@ -220,19 +211,13 @@
220211 size_t size, const struct mem_type *type)
221212 {
222213 unsigned long addr = virt, end = virt + size;
223
- pgd_t *pgd;
224
- pud_t *pud;
225
- pmd_t *pmd;
214
+ pmd_t *pmd = pmd_off_k(addr);
226215
227216 /*
228217 * Remove and free any PTE-based mapping, and
229218 * sync the current kernel mapping.
230219 */
231220 unmap_area_sections(virt, size);
232
-
233
- pgd = pgd_offset_k(virt);
234
- pud = pud_offset(pgd, addr);
235
- pmd = pmd_offset(pud, addr);
236221 do {
237222 unsigned long super_pmd_val, i;
238223
....@@ -300,7 +285,8 @@
300285 * Don't allow RAM to be mapped with mismatched attributes - this
301286 * causes problems with ARMv6+
302287 */
303
- if (WARN_ON(pfn_valid(pfn) && mtype != MT_MEMORY_RW))
288
+ if (WARN_ON(memblock_is_map_memory(PFN_PHYS(pfn)) &&
289
+ mtype != MT_MEMORY_RW))
304290 return NULL;
305291
306292 area = get_vm_area_caller(size, VM_IOREMAP, caller);
....@@ -381,15 +367,11 @@
381367 EXPORT_SYMBOL(ioremap);
382368
383369 void __iomem *ioremap_cache(resource_size_t res_cookie, size_t size)
384
- __alias(ioremap_cached);
385
-
386
-void __iomem *ioremap_cached(resource_size_t res_cookie, size_t size)
387370 {
388371 return arch_ioremap_caller(res_cookie, size, MT_DEVICE_CACHED,
389372 __builtin_return_address(0));
390373 }
391374 EXPORT_SYMBOL(ioremap_cache);
392
-EXPORT_SYMBOL(ioremap_cached);
393375
394376 void __iomem *ioremap_wc(resource_size_t res_cookie, size_t size)
395377 {
....@@ -497,3 +479,11 @@
497479 {
498480 early_ioremap_setup();
499481 }
482
+
483
+bool arch_memremap_can_ram_remap(resource_size_t offset, size_t size,
484
+ unsigned long flags)
485
+{
486
+ unsigned long pfn = PHYS_PFN(offset);
487
+
488
+ return memblock_is_map_memory(pfn);
489
+}