[PATCH 07/11] backports: io.h: Add __ioread32_copy()

Hauke Mehrtens <[email protected]>
Newsgroups org.kernel.vger.backports
Message-ID <[email protected]>
Add __ioread32_copy() from usptream Linux commit a9aec5881b9d
("lib/iomap_copy.c: add __ioread32_copy()") which is used by mt76
driver.

Signed-off-by: Hauke Mehrtens <[email protected]>
---
 backport/backport-include/linux/io.h |  5 +++++
 backport/compat/backport-4.5.c       | 22 ++++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/backport/backport-include/linux/io.h b/backport/backport-include/linux/io.h
index 78ae4650..f91085be 100644
--- a/backport/backport-include/linux/io.h
+++ b/backport/backport-include/linux/io.h
@@ -6,4 +6,9 @@
 #define IOMEM_ERR_PTR(err) (__force void __iomem *)ERR_PTR(err)
 #endif
 
+#if LINUX_VERSION_IS_LESS(4,5,0)
+#define __ioread32_copy LINUX_BACKPORT(__ioread32_copy)
+void __ioread32_copy(void *to, const void __iomem *from, size_t count);
+#endif
+
 #endif /* __BP_LINUX_IO_H */
diff --git a/backport/compat/backport-4.5.c b/backport/compat/backport-4.5.c
index 13764dc7..b4aae624 100644
--- a/backport/compat/backport-4.5.c
+++ b/backport/compat/backport-4.5.c
@@ -18,6 +18,7 @@
 #include <linux/slab.h>
 #include <linux/string.h>
 #include <asm/uaccess.h>
+#include <linux/io.h>
 
 #if LINUX_VERSION_IS_GEQ(3,19,0)
 int led_set_brightness_sync(struct led_classdev *led_cdev,
@@ -150,3 +151,24 @@ int devm_led_trigger_register(struct device *dev,
 	return rc;
 }
 EXPORT_SYMBOL_GPL(devm_led_trigger_register);
+
+/**
+ * __ioread32_copy - copy data from MMIO space, in 32-bit units
+ * @to: destination (must be 32-bit aligned)
+ * @from: source, in MMIO space (must be 32-bit aligned)
+ * @count: number of 32-bit quantities to copy
+ *
+ * Copy data from MMIO space to kernel space, in units of 32 bits at a
+ * time.  Order of access is not guaranteed, nor is a memory barrier
+ * performed afterwards.
+ */
+void __ioread32_copy(void *to, const void __iomem *from, size_t count)
+{
+	u32 *dst = to;
+	const u32 __iomem *src = from;
+	const u32 __iomem *end = src + count;
+
+	while (src < end)
+		*dst++ = __raw_readl(src++);
+}
+EXPORT_SYMBOL_GPL(__ioread32_copy);
-- 
2.20.1

--
To unsubscribe from this list: send the line "unsubscribe backports" in
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.