svn commit: r352330 - stable/11/sys/compat/linuxkpi/common/include/linux
Hans Petter Selasky
hselasky at FreeBSD.org
Sat Sep 14 13:33:53 UTC 2019
Author: hselasky
Date: Sat Sep 14 13:33:52 2019
New Revision: 352330
URL: https://svnweb.freebsd.org/changeset/base/352330
Log:
MFC r351693:
Use DEVICE memory instead of UNCACHEABLE on aarch64 in ioremap() in the LinuxKPI.
This fixes system hangs on reading device registers on aarch64.
Tested with: Marvell MACCHIATObin (Armada8k) + mlx4en, amdgpu
Submitted by: Greg V <greg at unrelenting.technology>
Differential Revision: https://reviews.freebsd.org/D20789
Sponsored by: Mellanox Technologies
Modified:
stable/11/sys/compat/linuxkpi/common/include/linux/io.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/compat/linuxkpi/common/include/linux/io.h
==============================================================================
--- stable/11/sys/compat/linuxkpi/common/include/linux/io.h Sat Sep 14 13:33:36 2019 (r352329)
+++ stable/11/sys/compat/linuxkpi/common/include/linux/io.h Sat Sep 14 13:33:52 2019 (r352330)
@@ -356,16 +356,25 @@ void *_ioremap_attr(vm_paddr_t phys_addr, unsigned lon
#define _ioremap_attr(...) NULL
#endif
+#ifdef VM_MEMATTR_DEVICE
#define ioremap_nocache(addr, size) \
+ _ioremap_attr((addr), (size), VM_MEMATTR_DEVICE)
+#define ioremap_wt(addr, size) \
+ _ioremap_attr((addr), (size), VM_MEMATTR_DEVICE)
+#define ioremap(addr, size) \
+ _ioremap_attr((addr), (size), VM_MEMATTR_DEVICE)
+#else
+#define ioremap_nocache(addr, size) \
_ioremap_attr((addr), (size), VM_MEMATTR_UNCACHEABLE)
-#define ioremap_wc(addr, size) \
- _ioremap_attr((addr), (size), VM_MEMATTR_WRITE_COMBINING)
-#define ioremap_wb(addr, size) \
- _ioremap_attr((addr), (size), VM_MEMATTR_WRITE_BACK)
#define ioremap_wt(addr, size) \
_ioremap_attr((addr), (size), VM_MEMATTR_WRITE_THROUGH)
#define ioremap(addr, size) \
_ioremap_attr((addr), (size), VM_MEMATTR_UNCACHEABLE)
+#endif
+#define ioremap_wc(addr, size) \
+ _ioremap_attr((addr), (size), VM_MEMATTR_WRITE_COMBINING)
+#define ioremap_wb(addr, size) \
+ _ioremap_attr((addr), (size), VM_MEMATTR_WRITE_BACK)
void iounmap(void *addr);
#define memset_io(a, b, c) memset((a), (b), (c))
More information about the svn-src-stable-11
mailing list