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-all mailing list