|
@@ -40,3 +40,31 @@ void __attribute__((weak)) __iowrite32_copy(void __iomem *to,
|
|
__raw_writel(*src++, dst++);
|
|
__raw_writel(*src++, dst++);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(__iowrite32_copy);
|
|
EXPORT_SYMBOL_GPL(__iowrite32_copy);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * __iowrite64_copy - copy data to MMIO space, in 64-bit or 32-bit units
|
|
|
|
+ * @to: destination, in MMIO space (must be 64-bit aligned)
|
|
|
|
+ * @from: source (must be 64-bit aligned)
|
|
|
|
+ * @count: number of 64-bit quantities to copy
|
|
|
|
+ *
|
|
|
|
+ * Copy data from kernel space to MMIO space, in units of 32 or 64 bits at a
|
|
|
|
+ * time. Order of access is not guaranteed, nor is a memory barrier
|
|
|
|
+ * performed afterwards.
|
|
|
|
+ */
|
|
|
|
+void __attribute__((weak)) __iowrite64_copy(void __iomem *to,
|
|
|
|
+ const void *from,
|
|
|
|
+ size_t count)
|
|
|
|
+{
|
|
|
|
+#ifdef CONFIG_64BIT
|
|
|
|
+ u64 __iomem *dst = to;
|
|
|
|
+ const u64 *src = from;
|
|
|
|
+ const u64 *end = src + count;
|
|
|
|
+
|
|
|
|
+ while (src < end)
|
|
|
|
+ __raw_writeq(*src++, dst++);
|
|
|
|
+#else
|
|
|
|
+ __iowrite32_copy(to, from, count * 2);
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+EXPORT_SYMBOL_GPL(__iowrite64_copy);
|