|
@@ -217,6 +217,28 @@ early_memremap(resource_size_t phys_addr, unsigned long size)
|
|
return (__force void *)__early_ioremap(phys_addr, size,
|
|
return (__force void *)__early_ioremap(phys_addr, size,
|
|
FIXMAP_PAGE_NORMAL);
|
|
FIXMAP_PAGE_NORMAL);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+#define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT)
|
|
|
|
+
|
|
|
|
+void __init copy_from_early_mem(void *dest, phys_addr_t src, unsigned long size)
|
|
|
|
+{
|
|
|
|
+ unsigned long slop, clen;
|
|
|
|
+ char *p;
|
|
|
|
+
|
|
|
|
+ while (size) {
|
|
|
|
+ slop = src & ~PAGE_MASK;
|
|
|
|
+ clen = size;
|
|
|
|
+ if (clen > MAX_MAP_CHUNK - slop)
|
|
|
|
+ clen = MAX_MAP_CHUNK - slop;
|
|
|
|
+ p = early_memremap(src & PAGE_MASK, clen + slop);
|
|
|
|
+ memcpy(dest, p + slop, clen);
|
|
|
|
+ early_memunmap(p, clen + slop);
|
|
|
|
+ dest += clen;
|
|
|
|
+ src += clen;
|
|
|
|
+ size -= clen;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
#else /* CONFIG_MMU */
|
|
#else /* CONFIG_MMU */
|
|
|
|
|
|
void __init __iomem *
|
|
void __init __iomem *
|